Laravel 8 中未定义操作 Controller@store 的问题
Problem with action Controller@store not defined in Laravel 8
我仍在探索 Laravel 8 但我的控制器的 store() 方法有问题 'not defined.'
InvalidArgumentException Action PostsController@store not defined.
(View: D:\Server\htdocs\app\resources\views\posts\create.blade.php)
我相信我实际上已经定义了它并且我使用了资源路由。
路线
Route::resource('posts', PostsController::class);
Blade
@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;
}
}
如果您希望在为操作生成 URL 时添加命名空间前缀,请进入您的 RouteServiceProvider
并将 $namespace
属性 设置为 App\Http\Controllers
。
否则,您应该通过他们的完全限定 Class 名称 (FQCN) 来指代您的控制器。
['action' => 'App\Http\Controllers\PostsController@store', ...]
或者您可以尝试在您的情况下使用命名路由,因为这是一种资源 PostsController
您应该具有路由名称 posts.store
route('posts.store')
传入请求的实例将作为 Laravel 服务容器的参数自动注入到您的 PostsController@store
定义中。
我有一个类似的案例,但我没有使用资源控制器。所以我必须明确定义该特定操作的路线。
您应该在表单中使用路由而不是操作。试试像
{!! Form::open(['route' => 'products.store', 'method' => 'POST']) !!}
我了解你的问题出在哪里。
你用过。
{!! Form::open(['action' => 'PostsController@store', 'method' => 'POST']) !!}
这是错误的,而不是你必须使用。
{!! Form::open(['url' => 'PostsController@store', 'method' => 'POST']) !!}
希望你的问题能得到解决。
我仍在探索 Laravel 8 但我的控制器的 store() 方法有问题 'not defined.'
InvalidArgumentException Action PostsController@store not defined. (View: D:\Server\htdocs\app\resources\views\posts\create.blade.php)
我相信我实际上已经定义了它并且我使用了资源路由。
路线
Route::resource('posts', PostsController::class);
Blade
@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;
}
}
如果您希望在为操作生成 URL 时添加命名空间前缀,请进入您的 RouteServiceProvider
并将 $namespace
属性 设置为 App\Http\Controllers
。
否则,您应该通过他们的完全限定 Class 名称 (FQCN) 来指代您的控制器。
['action' => 'App\Http\Controllers\PostsController@store', ...]
或者您可以尝试在您的情况下使用命名路由,因为这是一种资源 PostsController
您应该具有路由名称 posts.store
route('posts.store')
传入请求的实例将作为 Laravel 服务容器的参数自动注入到您的 PostsController@store
定义中。
我有一个类似的案例,但我没有使用资源控制器。所以我必须明确定义该特定操作的路线。
您应该在表单中使用路由而不是操作。试试像
{!! Form::open(['route' => 'products.store', 'method' => 'POST']) !!}
我了解你的问题出在哪里。 你用过。
{!! Form::open(['action' => 'PostsController@store', 'method' => 'POST']) !!}
这是错误的,而不是你必须使用。
{!! Form::open(['url' => 'PostsController@store', 'method' => 'POST']) !!}
希望你的问题能得到解决。