Laravel 8 中未定义动作 Controller@store 的问题
Posted
技术标签:
【中文标题】Laravel 8 中未定义动作 Controller@store 的问题【英文标题】:Problem with action Controller@store not defined in Laravel 8 【发布时间】:2020-12-29 07:40:46 【问题描述】:我仍在探索 Laravel 8,但我的控制器的 store() 方法“未定义”存在问题。
InvalidArgumentException Action PostsController@store 未定义。 (查看:D:\Server\htdocs\app\resources\views\posts\create.blade.php)
我相信我实际上已经定义了它并且我使用了资源路由。
路线
Route::resource('posts', PostsController::class);
刀片
@extends('layouts.app')
@section('content')
<h1>Create Post</h1>
!! Form::open(['action' => 'PostsController@store', 'method' => 'POST']) !!
<div class="form-group">
Form::label('title', 'Title')
Form::label('title', ['class' => 'form-control','placeholder' =>'Title'])
</div>
<div class="form-group">
Form::label('body', 'Body')
Form::textarea('body', ['class' => 'form-control','placeholder' =>'Body'])
</div>
Form::submit('Submit',['class' =>'btn btn-primary'])
!! Form::close() !!
@endsection
控制器
class PostsController extends Controller
public function create()
return view('posts.create');
public function store(Request $request)
$this->validate($request, [
'title' => 'required',
'body' => 'required'
]);
return 143;
【问题讨论】:
您是否尝试过使用命名空间?'\App\Http\Controllers\PostsController@store'
我应该把这个命名空间放在哪里?
很抱歉,我可以了解更多关于包裹的信息吗?我有点不知所措
您应该将该命名空间放入操作中。或者,您可以使用route('posts.store')
来使用命名路由。
【参考方案1】:
您应该在表单中使用路由而不是操作。尝试类似
!! Form::open(['route' => 'products.store', 'method' => 'POST']) !!
【讨论】:
【参考方案2】:或者,您可以尝试在您的情况下使用命名路由,因为这是资源PostsController
,您应该使用路由名称posts.store
route('posts.store')
传入请求的实例将被 Laravel 服务容器作为参数自动注入到您的PostsController@store
定义中。
我有类似的情况,但我没有使用资源控制器。所以我必须为那个特定的动作明确定义一个路线。
【讨论】:
【参考方案3】:如果您希望在为操作生成 URL 时添加命名空间前缀,请进入您的 RouteServiceProvider
并将 $namespace
属性设置为 App\Http\Controllers
。
否则,您应该使用完全限定类名称 (FQCN) 来指代您的控制器。
['action' => 'App\Http\Controllers\PostsController@store', ...]
【讨论】:
我确实将$namespace
更改为App\Http\Controllers
,但我确实收到了另一个错误htmlentities() expects parameter 1 to be string, array given
你是怎么解决的? htmlentities() 期望参数 1 是字符串,给定数组以上是关于Laravel 8 中未定义动作 Controller@store 的问题的主要内容,如果未能解决你的问题,请参考以下文章
laravel 8 - auth()->factory() 相同的 refresh() 和尝试() 在 JWT Auth Controller 中未定义
使用 Mailgun API 在 Laravel 8 中未发送电子邮件
reducer.state.props 在嵌套动作 react/redux 中未定义