如何将参数传递给Laravel路由中引用的Controller方法?

时间:2014-11-29 20:35:40

标签: php laravel laravel-routing

我正在尝试使用一种方法来实现接受/拒绝,因为我将更新相同的模型,但差别不大。

如何直接从Laravel Routes将参数传递给控制器​​方法(即不是通过url提供)。

E.g。类似的东西:

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

我的控制器代码如下:

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

是否可以在Routes配置文件中定义$accept参数?

3 个答案:

答案 0 :(得分:2)

我对你发现的答案有所改进。通过添加route constraint,您可以确保只允许两个verb 我也更改了命名以使其更有意义。如果没有,只需改变它;)

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

答案 1 :(得分:0)

您可以使用此解决方案:

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));
}));

此代码使用Closure。在这个闭包中,控制器将由laravel的路由器发送。

答案 2 :(得分:0)

我终于求助于:

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

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

我不确定这是一个理想的解决方案,也许用整数实现它可能更好,但它可能以相同的方式处理Laravel。