【问题标题】:Route prefix with resource controller - Laravel 5.5带有资源控制器的路由前缀 - Laravel 5.5
【发布时间】:2018-12-18 06:46:42
【问题描述】:

路线和前缀具有相同的名称。我无法获得{hotel}ID 参数,该参数为空,如下图所示。使用同名前缀和资源控制器的最佳方法是什么?

Routes/web.php

Route::namespace('Admin\Hotel')->prefix('hotels')->name('hotels.')->group(function () {
    Route::resource('/', 'HotelController');
    Route::resource('rooms', 'RoomController');
    Route::resource('rooms/gallery', 'RoomGalleryController');
});

php artisan route:listRoute::resource('/', 'HotelController')

【问题讨论】:

  • 我不明白你的问题。能说清楚一点吗?
  • 同样的问题不清楚
  • URI: http:example.com/admin/hotels 路由组前缀名称是hotels,我的资源控制器名称也是hotels。如果前缀和资源控制器名称相同,那么最好的使用方法是什么?
  • @MartinBean 我已经更新了问题。

标签: laravel laravel-5


【解决方案1】:

这是因为资源方法会自动添加前缀和命名路由与您提供的第一个参数,hotel 在您的情况下。

所以你可以这样做:

Route::namespace('Admin\Hotel')->group(function () {
    Route::resource('hotels', 'HotelController');
});

或者,你可以去掉组功能,直接使用资源方法。

Route::resource('hotels', 'Admin\Hotel\HotelController');

或者,

Route::namespace('Admin\Hotel')->group(function () {
    Route::resource('hotels', 'HotelController');
    Route::prefix('hotels')->name('hotels.')->group(function () {
        Route::resource('gallery', 'HotelGalleryController');
        Route::resource('rooms', 'RoomController');
        Route::resource('rooms/gallery', 'RoomGalleryController');
    });
});

【讨论】:

  • 如果我从组中删除前缀,我将不得不在每个资源控制器中使用第一个参数添加命名路由。
  • 是的,或者您可以拥有例如:Route::namespace('Admin\Hotel')->group(function () { Route::resource('hotels', 'HotelController'); Route::prefix('hotels')->name('hotels.*')->group(function() { // other routes }); });,因为resource 方法将为您生成所有内容。
【解决方案2】:

我觉得用group方法会更好,试试这个。

Route::group(['namespace' => 'Admin\Hotel', 'prefix' => 'hotel'], function(){
    ...
});

【讨论】:

  • 如果我这样做,URI 将是 http:example.com/admin/hotel/hotels
【解决方案3】:

有时您希望将其分组,因此解决方案是使用parameters 方法。

Route::namespace('Admin\Hotel')->prefix('hotels')->name('hotels.')->group(function () {
Route::resource('/', 'HotelController')->parameters(['' => 'hotel']);
Route::resource('rooms', 'RoomController');
Route::resource('rooms/gallery', 'RoomGalleryController');
});

【讨论】:

  • 这是在同名组中使用资源的完美答案。
【解决方案4】:

我在混合GroupResource 时遇到相同的情况,但我无法获得 ID 组(在本例中为 Hotel)。

这是我在 (Laravel 5.5) 中的做法:

Route::group(['prefix' => 'hotel/{hotel}'], function () {
    Route::resource('/', 'HotelController');
    Route::resource('rooms', 'RoomController');
    Route::resource('rooms/gallery', 'RoomGalleryController');
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-30
    • 1970-01-01
    • 2016-01-15
    • 2019-03-04
    相关资源
    最近更新 更多