Laravel - 动作未定义但已定义
Posted
技术标签:
【中文标题】Laravel - 动作未定义但已定义【英文标题】:Laravel - Action not defined but it is defined 【发布时间】:2018-11-09 05:50:35 【问题描述】:当我尝试加载 Blade.php 时出现此错误
Action App\Http\Controllers\InventoryItemController@change not defined.
我在 InventoryItemController 中有更改功能
public function change($new_status)
//
当我想制作按钮时就开始了
<a href="action('InventoryItemController@change', $inventoryitem['new_status'])"class="btn btn-info">Confirm Change</a>
当我制作“编辑”按钮并且该按钮正常工作时,我所做的一切都是一样的。
更新 1
我的按钮现在是这样的
<a href="route('change', [$inventoryitem['new_status'],
$inventoryitem['asset_id']])"class="btn btn-info">Confirm Change</a>
而我的改变功能是这样的
public function change($new_status, $asset_id)
$asset = Asset::find($asset_id);
$asset->status = $new_status;
return redirect('showasset', compact('asset','asset_id'));
我在网络中的路线是这样的
Route::get('change/$new_status/$asset_id','InventoryItemController@change')->name('change');
但是在我单击按钮后,它只是将我重定向到 url .../change/4/1 就是这样。没有任何变化。
【问题讨论】:
你的路线是什么?使用route
而不是action
我的错,不要正确理解你的代码。一般来说,使用路线而不是行动更好。我可以看到控制器(不仅仅是方法)吗?您将控制器文件存储在哪里?
您传递的参数应该类似于 ['new_status' => $inventoryitem['new_status']] 或类似的东西,具体取决于您的代码
@DessaugesAntoine 如果我把路线而不是行动放在同一件事上,路线未定义。控制器文件是每个控制器文件所在的位置,在 app/http/Controllers/
@NoOorZ24 我需要传递 new_status 所以在我的更改函数中我可以更改另一个表中某些项目的状态。
@Zolak94 只是为了确定。在这种情况下,我们知道查看 $inventoryitem
是什么以及您的控制器文件中的更多内容。
【参考方案1】:
在 Laravel 中不推荐使用 Action
您可以改用路线。
在你的路由文件 (/routes/web.php) 中定义路由。
Route::get('change/status','InventoryItemController@change')->name('change');
然后在你的视野中
<a href="route('change', $inventoryitem['new_status'])"class="btn btn-info">Confirm Change</a>
在您的控制器中使用。
public function change ($status)
// rest of the function.
希望对你有帮助
【讨论】:
我需要传递参数来改变功能。这样它只会将我重定向到 /change 页面。我没有。我需要的是按钮,单击该按钮会更改另一个表中项目的状态。 查看更新后的答案Route::get('change/status','InventoryItemController@change')->name('change');
现在我收到此错误Missing required parameters for [Route: change] [URI: change/status].
@Zolak94 在您的更改更改功能中,您可以通过将其作为参数传递来获取新状态。查看我的更新答案
您的示例中没有函数名称,但仍然是相同的错误。【参考方案2】:
在路由文件中定义控制器的方法如下:
Route::get('url/new_status',InventoryItemController@change);
更新 1 的答案
public function change($new_status, $asset_id)
$asset = Asset::find($asset_id);
$asset->status = $new_status;
$asset->save();
return view('your_view_path',compact('variable1','variable2'));
【讨论】:
我将返回重定向更改为返回视图,但它仍然转到此 url.../change/4/1
(我放 ... 因为我的网站安全)
作为提示:如果您想将其返回到“确认更改”按钮所在的页面..您可以执行 return redirect()->back() 而不是返回视图。
请确保您的项目中有 showasset.blade.php
我确实有,但问题是当我从控制器调用方法时,它什么也不做,就像那个方法中什么都没有。【参考方案3】:
最终错误出现在我的路线中
Route::get('change/$new_status/$asset_id','InventoryItemController@change')->name('change');
应该是这样的
Route::get('change/new_status/asset_id','InventoryItemController@change')->name('change');
更改之后,一切都完美无缺。谢谢你们的帮助!
【讨论】:
以上是关于Laravel - 动作未定义但已定义的主要内容,如果未能解决你的问题,请参考以下文章