我正在尝试使用一种方法来实现接受/拒绝,因为我将更新相同的模型,但差别不大。
如何直接从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
参数?
答案 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。