2017-06-19 137 views
0

我有2个部分到我的网站,管理员端和公共端。我遇到的问题是,如果我去例如admin/menus然后我去我的公共方面,而不是去菜单页面。路径不显示正确的页面

我不知道为什么会发生这种情况。我试图在公共场合重新安排路线的顺序,但那不起作用,我已经对我做错了什么做了一个空白。

我的公共路线

<?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' 
    ]); 

我的管理菜单航线

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

我productItem功能

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')); 
} 

误差与这条路线

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

如果我删除此路线,那么它的工作原理,但我需要这条路线,所以我不能删除它。

如果我错过了其他需要提供的东西,请告诉我。

+0

什么是错误,你可以进入更多细节吗? –

+0

确保你在添加你的管理路线'admin/menus'后面有路线'/ {category}/{slug}' –

+0

你的路线'/ admin/menus'匹配路线'/ {category}/{slug}'。你定义的路由的顺序很重要,所以像'/ admin/menus'这样的显式路由应该在**通配符路由之前被定义,比如'/ {category}/{slug}',否则你会经常遇到这个问题。 –

回答

0

这将工作,如果你把它放在顶部,但它可能会与我认为的其他路线冲突。

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

你可以尝试这样如果u想

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

0

您应该预先路线/{category}/{slug},以避免冲突。所以更换:

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

通过:

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

并更新链接到你的观点,即路线。

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

会赶上路径的每个组合有两个项目/admin/menus/admin/anything/foo/bar。你可能要与

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

遇到同样的问题,如果您不能重命名你的路线,你需要把在上面的所有限制性更强的路线,你在底部限制较少的路线。

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}', '[email protected]'); 

UPDATE

您有几种选择。

这里有两个。

您可以限制RegEx接受的路线。

Route Parameters>正则表达式约束

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

或者你可以改变caffeine route through its config

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

然后改变route/app/config/genealabs-laravel-caffeine.php

还有一些其他的方式为好。我刚刚建立了一个快速测试网站,并开始弄清楚路线,看看最适合您的需求。

+0

我使用含咖啡因的模块,因此我的东西都是模块化的,所以我如何指定管理员/菜单在上面 – Isis