Laravel:Controller方法在调用时接收空参数

时间:2017-10-17 19:27:04

标签: php laravel

在网站开发过程中我遇到了这个问题。我试图从视图中的窗体调用控制器方法。这是视图中的代码:

{{ Form::open(array('route' =>['deletes', $client])) }}
    {{ Form::button('Delete', ['class'=>'btn btn-danger', 'type'=>'submit']) }}
{{ Form::close() }}

正如您所看到的,我正在尝试将对象$client传递给路径所指的方法。路线定义如下:

Route::post('/client_show/destroy','ClientsController@destroy')->name('deletes');

这是ClientController方法:

public function destroy(Client $client) {
    $client->delete();
    return redirect('/client_show')->with('success', 'Deleted');
}

问题是,即使$client对象确实在表单中初始化,只要调用destroy(Client $client)$client变量就会为空。因此删除过程失败,没有删除任何内容。我尝试过使用

'url' =>['/client_show/destroy', $client]
相反,但是每当我得到空物时,似乎没有任何效果。谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

您尚未在路线定义中定义任何路线参数。因此,当调用destroy()控制器方法时,它将传递一个普通的new Client对象。

将路线参数添加到您的路线中,您应该做得很好:

Route::post('/client_show/destroy/{client}', 'ClientsController@destroy')->name('deletes');

您可以查看route model binding documentation here

答案 1 :(得分:1)

您需要在路线中添加{client}

Route::post('/client_show/destroy/{client}','ClientsController@destroy')->name('deletes');

然后你需要传递ID而不是整个对象:

{{ Form::open(['route' => ['deletes', $client->id]]) }}