如何将参数传递给 Laravel 路由中引用的控制器方法


How to pass parameter to Controller method referenced in Laravel Routes?

我正在尝试使用一种方法来实现接受/拒绝,因为我将更新相同的模型,几乎没有区别。

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

例如,像这样:

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)
{
    ...

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

我比你自己找到的答案有所改进。通过添加路由约束,可以确保只允许两个verb
此外,我更改了命名以使其更有意义。如果没有,只需将其更改为;)

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

您可以使用此解决方案:

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

此代码使用闭包。在此闭包中,控制器将由 laravel 的路由器调度。

我最终求助于:

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可能会以相同的方式处理两者。