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 中未定义

如果在 laravel 5.1 中未授权操作,则通过 ajax 显示错误

rails动作控制器中未定义的方法“devise_for”

错误:laravel 视图中未定义的变量