2017-06-19 7 views
0

Ich habe 2 Abschnitte auf meiner Website, der Admin-Seite und der öffentlichen Seite. Das Problem, das ich habe ist, dass, wenn ich zum Beispiel admin/menus gehe, dann gehe ich auf meine öffentliche Seite, anstatt auf die Menüseite zu gehen.Route nicht die richtige Seite

Ich bin mir nicht sicher, warum das passiert. Ich habe versucht, die Reihenfolge der Routen in meiner öffentlichen Seite neu zu ordnen, aber das hat nicht funktioniert, und ich habe eine Lücke gezogen, was ich falsch gemacht habe.

Meine öffentlichen Routen

<?php 

    Route::get('/', [ 
     'uses' => '[email protected]', 
     'as' => 'index', 
    ]); 

    Route::get('/{id}', '[email protected]'); 

    Route::post('/contact', [ 
     'uses' => '[email protected]', 
     'as' => 'contact', 
    ]); 

    Route::get('/{category}/{slug}', [ 
     'uses' => '[email protected]', 
     'as' => 'product.item', 
    ]); 

    Route::any('/search', [ 
     'uses' => '[email protected]', 
     'as' => 'search' 
    ]); 

meine Admin-Menü Route

Route::resource('admin/menus', 'MenusController'); 

Meine productItem Funktion

public function productItem($category, $slug) 
{ 

    $menus_child = Menu::where('menu_id', 0)->with('menusP')->get(); 

    $contact = Contact::all(); 

    $single_product = Product::where('slug', $slug)->get(); 

    return view('open::public.single_item', compact('menus_child', 'contact', 'single_product')); 
} 

Der Fehler mit dieser Strecke kommt in

Route::get('/{category}/{slug}', [ 
    'uses' => '[email protected]', 
    'as' => 'product.item', 
]); 

Wenn ich diese Route entferne, funktioniert es, aber ich brauche diese Route, damit ich sie nicht entfernen kann.

Wenn ich etwas anderes vermisse, das ich geben muss, lass es mich wissen.

+0

was ist der Fehler, können Sie bitte näher ins Detail gehen? –

+0

Stellen Sie sicher, dass Sie Ihre Adminroute 'admin/menus' hinzufügen, bevor Sie der Route folgen'/{Kategorie}/{slug} ' –

+0

Ihre Route'/admin/menus' entspricht der Route '/ {Kategorie}/{slug}'. Die Reihenfolge der definierten Routen ist wichtig, daher sollten explizite Routen wie '/ admin/menus' definiert werden ** vor ** Platzhalterrouten wie'/{Kategorie}/{slug} ', sonst wird dieses Problem oft auftreten . –

Antwort

0

Dies funktioniert, wenn Sie es oben, aber es kann mit anderen Routen kollidieren, denke ich.

Route::get('/{category}/{slug}', [ 'uses' => '[email protected]', 'as' => 'product.item', ]);

können Sie wie folgt versuchen, wenn u

Route::get('/category/{category}/{slug}', function (\Illuminate\Http\Request $request) { echo "ok"; });

0

wollen, sollten Sie die Route Präfix /{category}/{slug} Konflikte zu vermeiden. So ersetzen:

Route::get('/{category}/{slug}', [ 
    'uses' => '[email protected]', 
    'as' => 'product.item', 
]); 

Von:

Route::get('/open/{category}/{slug}', [ 
    'uses' => '[email protected]', 
    'as' => 'product.item', 
]); 

und aktualisieren Sie Ihre Links zu dieser Strecke in Ihren Ansichten.

0
Route::get('/{category}/{slug}', [ 
    'uses' => '[email protected]', 
    'as' => 'product.item', 
]); 

Wird jede Kombination von Pfad fangen, die zwei Elemente haben /admin/menus, /admin/anything oder /foo/bar. Sie werden wahrscheinlich mit

Route::get('/{id}', '[email protected]'); 

in das gleiche Problem laufen Wenn Sie Ihre Routen umbenennen können, müssen Sie alle restriktiven Routen auf und Ihre weniger restriktiven Strecken auf dem Boden setzen.

Route::resource('admin/menus', 'MenusController'); 


Route::get('/', [ 
    'uses' => '[email protected]', 
    'as' => 'index', 
]); 

Route::post('/contact', [ 
    'uses' => '[email protected]', 
    'as' => 'contact', 
]); 

Route::any('/search', [ 
    'uses' => '[email protected]', 
    'as' => 'search' 
]); 

Route::get('/{category}/{slug}', [ 
    'uses' => '[email protected]', 
    'as' => 'product.item', 
]); 

Route::get('/{id}', 'OpenContr[email protected]'); 

UPDATE

Sie haben ein paar Optionen.

Hier sind zwei von ihnen.

Sie können einschränken, was die Route mit RegEx akzeptiert.

Siehe Route Parameters> Regular Expression Constraints

Route::get('/{category}/{slug}', function() { 
    return 'hello'; 
})->where('category', '[one]*[two]*[three]*[four]*[five]*'); 

Oder Sie können die caffeine route through its config ändern.

php artisan vendor:publish --tag=genealabs-laravel-caffeine 

Dann wird die route in /app/config/genealabs-laravel-caffeine.php

ändern Es gibt auch einige andere Möglichkeiten. Ich hatte gerade eine schnelle Testseite und fing an, mit Routen herumzuspielen, um zu sehen, was am besten für Ihre Bedürfnisse funktioniert.

+0

Ich benutze koffeinhaltigen Modul, so dass ich meine Sachen alle modular, so wie würde ich die Admin/Menüs oben zu sein – Isis

Verwandte Themen