我正在尝试使用一种方法来实现接受/拒绝,因为我将更新相同的模型,几乎没有区别。
如何直接从 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可能会以相同的方式处理两者。