2017-10-17 66 views
0

时收到空参数我遇到此问题。我试图从视图中的窗体调用控制器方法。这是一个视图代码:Laravel:控制器方法在网站开发期间调用

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

正如你可以看到,我想传递对象$client的方法,路由是指。这条路线被定义为这样的:

Route::post('/client_show/destroy','[email protected]')->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] 

取而代之,但似乎没有工作,每次我得到空物体。谢谢你的帮助。

+0

和您的形式最有可能发送GET无法发布 –

+0

@UnamataSanatarai,用明确的''method'=>'POST'来试用它,但它并没有帮助 – FilipMik

回答

1

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

路由参数添加到您的路线,你应该是不错的:

Route::post('/client_show/destroy/{client}', '[email protected]')->name('deletes'); 

你可以看看route model binding documentation here

1

您需要添加{client}的路线:

Route::post('/client_show/destroy/{client}','[email protected]')->name('deletes'); 

然后,你需要通过ID而不是整个对象:

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

因为Eloquent模型实现了UrlRoutable接口,所以你可以传递整个对象,并且它会自动将id拉出来,在url中使用它。 – patricus

+0

@patricus不知道。谢谢。 –