带有前缀和资源的laravel嵌套路由不起作用
Posted
技术标签:
【中文标题】带有前缀和资源的laravel嵌套路由不起作用【英文标题】:laravel nested route with prefix and resource dosent work 【发布时间】:2019-03-04 03:38:39 【问题描述】:我有很多这样的路线:
Route::resource('/dashboard/class', 'classController');
Route::get('/dashboard/class/get-by-filter', 'classController@getByFilter');
Route::get('/dashboard/class/get-by-search', 'classController@getBySearch');
...
...
Route::resource('/dashboard/orders', 'OrderController');
Route::get('/dashboard/orders/get-by-filter', 'OrderController@getByFilter');
...
现在我想用前缀、组和资源来写这些,但是这样写时我遇到了问题:
Route::prefix('dashboard')->group(function()
Route::prefix('class')->group(function()
Route::resource('/', 'classController');
Route::get('/get-by-filter', 'classController@getByFilter');
Route::get('/get-by-search', 'classController@getBySearch');
);
Route::prefix('orders')->group(function()
Route::resource('/', 'OrderController');
Route::get('/get-by-filter', 'OrderController@getByFilter');
Route::get('/get-by-search', 'OrderController@getBySearch');
);
);
为什么当我尝试访问这样的显示地址时返回 404:
example.com/dashboard/orders/4
【问题讨论】:
【参考方案1】:你需要写resource
而不是get
Route::prefix('dashboard')->group(function()
Route::prefix('class')->group(function()
Route::resource('/', 'classController');
Route::get('/get-by-filter', 'classController@getByFilter');
Route::get('/get-by-search', 'classController@getBySearch');
);
Route::prefix('orders')->group(function()
Route::resource('/', 'OrderController');
Route::get('/get-by-filter', 'OrderController@getByFilter');
Route::get('/get-by-search', 'OrderController@getBySearch');
);
);
【讨论】:
对不起,那是我的输入错误。我这样做了,但它还不起作用!【参考方案2】:我正在使用这样的组路由。
<?php
Route::group(['prefix' => 'dashboard'], function()
Route::group(['prefix' => 'class'], function()
Route::resource('/', 'classController');
Route::get('/get-by-filter', 'classController@getByFilter');
Route::get('/get-by-search', 'classController@getBySearch');
);
Route::group(['prefix' => 'orders'], function()
Route::resource('/', 'OrderController');
Route::get('/get-by-filter', 'OrderController@getByFilter');
Route::get('/get-by-search', 'OrderController@getBySearch');
);
);
试试这个。或许这会对你有所帮助。
【讨论】:
感谢您的回复。我尝试这种方式,但它还没有工作! 并在控制台php artisan route:list
上运行此命令,然后这将显示所有路由列表。
当我运行这个: php artisan route:list 时,我可以看到有这样的路由:/dashboard/orders/。但是当我输入 url 得到 404 err.
首先清除您的laravel.log
文件并再次运行点击订单网址然后检查laravel.log
文件。错误将在那里记录。【参考方案3】:
好的,我想我明白了,您只需在 url 中传递 id,然后在控制器方法中传递 dd($id)。
Route::group(['prefix'=>'dashboard'], function()
Route::group(['prefix'=>'class'], function()
Route::resource('/', 'classController');
Route::get('/get-by-filter', 'classController@getByFilter');
Route::get('/get-by-search', 'classController@getBySearch');
);
Route::group(['prefix'=>'orders'], function()
Route::resource('/id','classController');
Route::get('/get-by-filter', 'OrderController@getByFilter');
Route::get('/get-by-search', 'OrderController@getBySearch');
);
);
我建议您使用正确的命名空间并确保您的 classController 重定向到确切的方法。
【讨论】:
以上是关于带有前缀和资源的laravel嵌套路由不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Laravel:布局中的脚本和图像源在带有前缀的url中不起作用