У меня два контроллера — ChController & FillController. ChController работает отлично.
Route::resource('c', 'ChController');
| | GET|HEAD | c | c.index | App\Http\Controllers\ChController@index | |
| | GET|HEAD | c/create | c.create | App\Http\Controllers\ChController@create | |
| | POST | c | c.store | App\Http\Controllers\ChController@store | |
| | GET|HEAD | c/{c} | c.show | App\Http\Controllers\ChController@show | |
| | GET|HEAD | c/{c}/edit | c.edit | App\Http\Controllers\ChController@edit | |
| | PUT | c/{c} | c.update | App\Http\Controllers\ChController@update | |
| | PATCH | c/{c} | | App\Http\Controllers\ChController@update | |
| | DELETE | c/{c} | c.destroy | App\Http\Controllers\ChController@destroy | |
Но мне нужен вложенный FillController (f), например:
/c/{c}/create
/c/{c}/{f}
/c/{c}/{f}/show
/c/{c}/{f}/edit
// etc...
Я старался:
Route::group(['prefix' => 'c/{c}'], function () {
Route::resource('{f}', 'FillController');
});
| | GET|HEAD | c/{c}/{f} | c.{c}.{f}.index | App\Http\Controllers\FillController@index | |
| | GET|HEAD | c/{c}/{f}/create | c.{c}.{f}.create | App\Http\Controllers\FillController@create | |
| | POST | c/{c}/{f} | c.{c}.{f}.store | App\Http\Controllers\FillController@store | |
| | GET|HEAD | c/{c}/{f}/
| c. {c}. {f} .show | App \ Http \ Controllers \ FillController @ show | |
| | ПОЛУЧИТЬ | ГОЛОВА | с / {C} / {е} /
/ редактировать | c. {c}. {f} .edit | App \ Http \ Controllers \ FillController @ edit | |
| | PUT | с / {C} / {е} /
| c. {c}. {f} .update | App \ Http \ Controllers \ FillController @ update | |
| | Патч | с / {C} / {е} /
| | App \ Http \ Controllers \ FillController @ update | |
| | УДАЛИТЬ | с / {C} / {е} /
| c. {c}. {f} .destroy | App \ Http \ Controllers \ FillController @ destroy | |
Route :: group (['prefix' => 'c / {c}'], function () {
Route :: resource ('f', 'FillController');
});
| | ПОЛУЧИТЬ | ГОЛОВА | c / {c} / f | c. {c} .f.index | App \ Http \ Controllers \ FillController @ index | |
| | ПОЛУЧИТЬ | ГОЛОВА | c / {c} / f / create | c. {c} .f.create | App \ Http \ Controllers \ FillController @ create | |
| | ПОСТ | c / {c} / f | c. {c} .f.store | App \ Http \ Controllers \ FillController @ store | |
| | ПОЛУЧИТЬ | ГОЛОВА | c / {c} / f / {f} | c. {c} .f.show | App \ Http \ Controllers \ FillController @ show | |
| | ПОЛУЧИТЬ | ГОЛОВА | c / {c} / f / {f} / edit | c. {c} .f.edit | App \ Http \ Controllers \ FillController @ edit | |
| | PUT | c / {c} / f / {f} | c. {c} .f.update | App \ Http \ Controllers \ FillController @ update | |
| | Патч | c / {c} / f / {f} | | App \ Http \ Controllers \ FillController @ update | |
| | УДАЛИТЬ | c / {c} / f / {f} | c. {c} .f.destroy | App \ Http \ Controllers \ FillController @ destroy | |
[/ NOEDIT]
Все они делают промежуточную страницу / f /, которая мне не нужна.
Наиболее близким было то, что:
Route::group(['prefix' => 'c/{c}'], function () {
Route::resource('', 'FillController');
});
| | GET|HEAD | c/{c}/create | c.{c}..create | App\Http\Controllers\FillController@create | |
| | POST | c/{c} | c.{c}..store | App\Http\Controllers\FillController@store | |
| | GET|HEAD | c/{c}/{} | c.{c}..show | App\Http\Controllers\FillController@show | |
| | GET|HEAD | c/{c}/{}/edit | c.{c}..edit | App\Http\Controllers\FillController@edit | |
| | PUT | c/{c}/{} | c.{c}..update | App\Http\Controllers\FillController@update | |
| | PATCH | c/{c}/{} | | App\Http\Controllers\FillController@update | |
| | DELETE | c/{c}/{} | c.{c}..destroy | App\Http\Controllers\FillController@destroy | |
Но теперь маршрутизатор не знает о параметре {f}.
Решение
Прежде всего f
не является промежуточная страница как вы говорите, это просто сегмент URI. И это путь, потому что вы четко говорите, что субресурс (f
) осуществляется доступ. Я настоятельно рекомендую вам придерживаться этого.
Теперь, если вы все еще хотите идти своим путем, вы можете достичь этого с одним исключением. Вы не можете иметь index
маршрут для f
субресурс в вашей схеме именования, потому что он будет перезаписывать show
за c
ресурс.
Route::group(['prefix' => 'c/{c}'], function () {
// You can't have this because it will overwrite c.show
// Route::get('/', ['as' => 'f.index', 'uses' => 'FillController@index']);
Route::get('/create', ['as' => 'f.create', 'uses' => 'FillController@create']);
Route::post('/', ['as' => 'f.store', 'uses' => 'FillController@store']);
Route::get('/{f}/edit', ['as' => 'f.edit', 'uses' => 'FillController@edit']);
Route::put('/{f}', ['as' => 'f.update', 'uses' => 'FillController@update']);
Route::patch('/{f}', 'FillController@update');
Route::delete('/{f}', ['as' => 'f.destroy', 'uses' => 'FillController@destroy']);
});
| | ПОЛУЧИТЬ | ГОЛОВА | с | c.index | App \ Http \ Controllers \ ChController @ index | |
| | ПОЛУЧИТЬ | ГОЛОВА | с / создать | c.create | App \ Http \ Controllers \ ChController @ create | |
| | ПОСТ | с | c.store | App \ Http \ Controllers \ ChController @ store | |
| | ПОЛУЧИТЬ | ГОЛОВА | c / {c} | f.index | App \ Http \ Controllers \ FillController @ index | |
| | ПОЛУЧИТЬ | ГОЛОВА | c / {c} / edit | c.edit | App \ Http \ Controllers \ ChController @ edit | |
| | PUT | c / {c} | c.update | App \ Http \ Controllers \ ChController @ update | |
| | Патч | c / {c} | | App \ Http \ Controllers \ ChController @ update | |
| | УДАЛИТЬ | c / {c} | c.destroy | App \ Http \ Controllers \ ChController @ destroy | |
| | ПОЛУЧИТЬ | ГОЛОВА | c / {c} / create | f.create | App \ Http \ Controllers \ FillController @ create | |
| | ПОСТ | c / {c} | магазин App \ Http \ Controllers \ FillController @ store | |
| | ПОЛУЧИТЬ | ГОЛОВА | c / {c} / {f} / edit | f.edit | App \ Http \ Controllers \ FillController @ edit | |
| | PUT | c / {c} / {f} | f.update | App \ Http \ Controllers \ FillController @ update | |
| | Патч | c / {c} / {f} | | App \ Http \ Controllers \ FillController @ update | |
| | УДАЛИТЬ | c / {c} / {f} | ф.дестрой | App \ Http \ Controllers \ FillController @ destroy | |
Другие решения
Других решений пока нет …
По вопросам рекламы [email protected]