6

我仍在探索 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;
    }
}

在此处输入图像描述

4

3 回答 3

17

如果您希望在为操作生成 URL 时添加命名空间前缀,请进入您的RouteServiceProvider并将$namespace属性设置为。App\Http\Controllers

否则,您应该通过其完全限定类名称 (FQCN) 来引用您的控制器。

['action' => 'App\Http\Controllers\PostsController@store', ...]
于 2020-09-10T18:59:19.217 回答
0

或者,您可以尝试在您的情况下使用命名路由,因为这是PostsController您应该具有路由名称的资源posts.store

route('posts.store')

PostsController@storeLaravel 服务容器会自动将传入请求的实例作为参数注入到您的定义中。

我有类似的情况,但我没有使用资源控制器。所以我必须为那个特定的动作明确定义一个路线。

于 2021-05-14T10:49:06.723 回答
0

您应该在表单中使用路由而不是操作。尝试类似的东西

{!! Form::open(['route' => 'products.store', 'method' => 'POST']) !!}
于 2021-05-20T17:40:20.233 回答