Передача 2 параметров маршрутам Laravel - Ресурсы


Я пытаюсь построить свои маршруты с использованием ресурсов, чтобы я мог передать два параметра в свои ресурсы.

Я приведу вам несколько примеров того, как будут выглядеть URL-адреса:

domain.com/dashboard
domain.com/projects
domain.com/project/100
domain.com/project/100/emails
domain.com/project/100/email/3210
domain.com/project/100/files
domain.com/project/100/file/56968

Таким образом, вы можете видеть, что мне всегда нужна ссылка на идентификатор проекта, а также идентификатор электронной почты/файла и т. Д.

Я понимаю, что могу сделать это вручную, написав все маршруты вручную, но я стараюсь придерживаться модели ресурсов.

Я подумал, что что-то подобное может сработать?

Route::group(['prefix' => 'project'], function(){
  Route::group(['prefix' => '{project_id}'], function($project_id){

    // Files
    Route::resource('files', 'FileController');

  });
});
Author: amof, 2014-11-27

2 answers

Насколько я знаю о ресурсах

Route::resource('files', 'FileController');

Вышеупомянутый ресурс будет перенаправлять следующие URL-адреса.

Несколько Действий, Выполняемых Контроллером Ресурсов для вашего Route::resource('files', 'FileController');

Route::get('files',FileController@index) // get req will be routed to the index() function in your controller
Route::get('files/{val}',FileController@show) // get req with val will be routed to the show() function in your controller
Route::post('files',FileController@store) // post req will be routed to the store() function in your controller
Route::put('files/{id}',FileController@update) // put req with id will be routed to the update() function in your controller
Route::delete('files',FileController@destroy) // delete req will be routed to the destroy() function in your controller

Один resource, упомянутый выше, будет выполнять все перечисленные routing

Помимо тех, которые вы должны написать свой custom route

В вашем сценарии

Route::group(['prefix' => 'project'], function(){
  Route::group(['prefix' => '{project_id}'], function($project_id){

    // Files
    Route::resource('files', 'FileController');

  });
}); 

domain.com/project/100/files

если его запрос get будет направлен на FileController@index
если его запрос post будет направленный на FileController@store

Если ваш "domain.com/project/100/file/56968" изменен на "domain.com/project/100/files/56968" ( файл в файлы), то произойдет следующее укоренение...

domain.com/project/100/files/56968

если его запрос get будет направлен на FileController@show
если его запрос put будет направлен на FileController@update
если его запрос delete будет направлен на FileController@destroy

И это не влияет ни на какие другие url, о которых вы упомянули

При условии, что у вас должны быть Контроллеры ресурсов RESTful

 9
Author: Ronser, 2014-12-06 10:07:34

Для запроса типа "/проект/100/файл/56968" вы должны указать свой маршрут следующим образом:

Route::resource('project.file', 'FileController');

И затем вы можете получить параметры в методе show контроллера:

public function show($project, $file) {
    dd([
        '$project' => $project,
        '$file' => $file
    ]);
}

Результатом этого примера будет:

array:2 [▼
  "$project" => "100"
  "$file" => "56968"
]
 5
Author: zhekaus, 2015-08-17 23:03:25