2014-11-27 74 views
7

Próbuję budować trasy za pomocą zasobów, dzięki czemu mogę przekazywać dwa parametry do moich zasobów.Przekazywanie 2 parametrów do tras Laravel - Zasoby

dam ci kilka przykładów, jak adresy URL będzie wyglądać:

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 

Więc widać, że zawsze trzeba mieć odniesienie do PROJECT_ID a także identyfikator e-mail/pliku itp

Rozumiem, że mogę to zrobić ręcznie, pisząc wszystkie trasy ręcznie, ale staram się trzymać modelu zasobów.

Pomyślałem, że coś takiego może zadziałać?

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

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

    }); 
}); 

Odpowiedz

9

O ile wiem, o zasobach

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

Powyższa zasób skieruje następujące adresy URL.

Kilka Operacje obsługiwane przez kontroler zasobów dla Route::resource('files', 'FileController');

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

pojedynczy resource Wspomniany powyżej zrobi wszystko wymienione routing

Oprócz tych, musisz napisać swój custom route

w twojej scenariusz:

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

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

    }); 
}); 

domain.com/project/100/files

jeśli jego żądanie get będą kierowane do [email protected]
jeśli jego żądanie post będą kierowane do [email protected]

jeśli „domain.com/project/100/file/56968” zmienia się na „domain.com/project/100/files/56968 (plik do plików), a następnie Następujące rootowanie nastąpi ...

domain.com/project/100/files/56968

jeśli jego żądanie get będą kierowane do [email protected]
jeśli jego żądanie put będą kierowane do [email protected]
jeśli jego żądanie delete będą kierowane do [email protected]

i nie ma ona wpływu na każdy inne url s zostały wymienione

Pod warunkiem, trzeba mieć RESTful Resource Controllers

+1

wyjaśnia to dobrze, że nie zdawali sobie sprawy, to minie identyfikator projektu poprzez metody, jak dobrze, ale to rzeczywiście wydaje się działać. Dzięki! – amof

4

Na prośbę jak „/ project/100/pliku/56968” należy określić trasy tak:

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

a następnie można uzyskać parametrów w metodzie pokaz kontrolera:

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

wynikiem tego przykładu będzie:

array:2 [▼ 
    "$project" => "100" 
    "$file" => "56968" 
]