2014-11-29 2 views
2

약간의 차이점 만 제외하고 같은 모델을 업데이트 할 것이므로 accept/reject 구현 방법을 사용하려고합니다.Laravel Routes에서 참조되는 Controller 메서드에 매개 변수를 전달하는 방법은 무엇입니까?

매개 변수를 Laravel Routes에서 직접 (즉, URL을 통해 제공하는 대신) 컨트롤러 메서드에 전달할 수 있습니다.

예. 같은 :

public function accept($friend, $accept = true) 
{ 
    ... 

가이 경로 설정 파일 내 $accept 매개 변수를 정의 할 수 있습니다 :

Route::put('/friends/{friend}/reject', ['as' => 'friends.reject', 'uses' => '[email protected]', 'accept' => false]); 
Route::put('/friends/{friend}/accept', ['as' => 'friends.reject', 'uses' => '[email protected]']); 

내 컨트롤러 코드가 같다?

Route::put('/friends/{friend}/reject',array('as' => 'friends.reject',function($friend){ 
    $accept = false; 
    $app = app(); 
    $controller = $app->make('FriendsController'); 
    $controller->callAction($app, $app['router'], 'accept', $parameters = array($friend, $accept)); 
})); 

이 코드는 클로저를 사용

답변

0

당신은이 솔루션을 사용할 수 있습니다. 이 클로저에서 컨트롤러는 laravel의 라우터에 의해 발송됩니다. 나는 이것이 어쩌면 정수로 구현하는 것이 좋습니다하지만이 가능 Laravel 프로세스 모두 같은 방법입니다,하지만 이상적인 솔루션입니다 확실하지 않다

Route::put('/friends/{friend}/{verb}', ['as' => 'friends.reject', 'uses' => '[email protected]']); 

public function accept($friend, $verb = 'accept') 
{ 
    ...//check if `verb` is 'accept' or 'reject' here.. 

:

0

나는 마지막으로 의지.

2

나는 당신이 당신 자신을 발견 한 답보다 개선 된 점이 있습니다. route constraint을 추가하면 verb 두 개만 허용됩니다.
또한 더 많은 의미를 만들기 위해 이름을 변경했습니다. 그렇지 않다면 변경하십시오.)

Route::put('/friends/{friend}/{verb}', 
    ['as' => 'friends.respond-to-request', 
    'uses' => '[email protected]'] 
)->where('verb', '(accept|reject)'); 
+0

이것은 정말 좋은 팁입니다. – user2094178