Laravel 5.6 如何向资源控制器添加自定义方法
How to add a custom method to resource controller in Laravel 5.6
在 Laravel 5.6 中向资源控制器添加自定义方法的正确方法是什么?
到目前为止,我所拥有的是 ProfileController
:
中的一种新方法
public function approve($id){
$user = User::find($id);
$user->state = '1';
$user->save();
return redirect('/dashboard')->with('success', 'User approved.');
}
以及添加到我的 web.php
文件中的以下行:
Route::post('/profile/{$id}/approve', 'ProfileController@approve');
Route::resource('profile', 'ProfileController');
我认为的表单 (afaik) 正确呈现为:
<form method="POST" action="http://myurl.com/profile/10/approve" accept-charset="UTF-8">
<input name="_token" type="hidden" value="v3F1RRhi7iJL2o4egOhcRiuahaGQBwkGkfMal1lh">
<input name="_method" type="hidden" value="PATCH">
<input class="btn btn-success" type="submit" value="Approve User">
</form>
遗憾的是,除了要显示的 "Sorry, the page you are looking for could not be found." 页面外,什么也没有发生。
我错过了什么?并进一步扩展这个问题,这甚至是在数据库条目上实现 "single field updates" 的有效方法吗?
感谢您的帮助!
您希望从您的路线中删除 $
标志:
Route::post('/profile/{id}/approve', 'ProfileController@approve');
其余部分正确。
我看到你有两个问题:
先把路线改成那样
Route::post('/profile/{id}/approve', 'ProfileController@approve');
其次你必须删除
<input name="_method" type="hidden" value="PATCH">
或者像这样替换你的路线:
Route::patch('/profile/{id}/approve', 'ProfileController@approve');
你写了var:$id这样的参数,也可以不写'$'。
但实际上您可以使用 Laravel 隐式模型绑定函数来执行此操作:
Route::post('/profile/{user}/approve', 'ProfileController@approve');
然后在你的控制器中:
public function approve(User $user){
// Delete this line--> $user = User::find($id);
$user->state = '1';
$user->save();
return redirect('/dashboard')->with('success', 'User approved.');
}
在 Laravel 5.6 中向资源控制器添加自定义方法的正确方法是什么?
到目前为止,我所拥有的是 ProfileController
:
public function approve($id){
$user = User::find($id);
$user->state = '1';
$user->save();
return redirect('/dashboard')->with('success', 'User approved.');
}
以及添加到我的 web.php
文件中的以下行:
Route::post('/profile/{$id}/approve', 'ProfileController@approve');
Route::resource('profile', 'ProfileController');
我认为的表单 (afaik) 正确呈现为:
<form method="POST" action="http://myurl.com/profile/10/approve" accept-charset="UTF-8">
<input name="_token" type="hidden" value="v3F1RRhi7iJL2o4egOhcRiuahaGQBwkGkfMal1lh">
<input name="_method" type="hidden" value="PATCH">
<input class="btn btn-success" type="submit" value="Approve User">
</form>
遗憾的是,除了要显示的 "Sorry, the page you are looking for could not be found." 页面外,什么也没有发生。
我错过了什么?并进一步扩展这个问题,这甚至是在数据库条目上实现 "single field updates" 的有效方法吗?
感谢您的帮助!
您希望从您的路线中删除 $
标志:
Route::post('/profile/{id}/approve', 'ProfileController@approve');
其余部分正确。
我看到你有两个问题: 先把路线改成那样
Route::post('/profile/{id}/approve', 'ProfileController@approve');
其次你必须删除
<input name="_method" type="hidden" value="PATCH">
或者像这样替换你的路线:
Route::patch('/profile/{id}/approve', 'ProfileController@approve');
你写了var:$id这样的参数,也可以不写'$'。 但实际上您可以使用 Laravel 隐式模型绑定函数来执行此操作:
Route::post('/profile/{user}/approve', 'ProfileController@approve');
然后在你的控制器中:
public function approve(User $user){
// Delete this line--> $user = User::find($id);
$user->state = '1';
$user->save();
return redirect('/dashboard')->with('success', 'User approved.');
}