【问题标题】:Action App\Http\Controllers\Controller@action not definedAction App\Http\Controllers\Controller@action 未定义
【发布时间】:2017-06-30 02:50:42
【问题描述】:

我想提交一个表单,但我总是得到Action App\Http\Controllers\About@show not defined,即使定义了函数show:

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;


class AboutController extends Controller
{
    public function create()
    {
        return view('about.contact');
    }

    public function show()
    {
        return view('about.contactshow');
    }

}

这是我的刀片模板about\contact.blade.php:

{!! Form::open(array('action' => 'About@show', 'method' => 'post')) !!}

    {!! Form::label('username','Username',array('id'=>'user','class'=>'')) !!}
    {!! Form::text('username','user 1',array('id'=>'user','class'=>'', 'placeholder' => 'user 1')) !!}

    {!! Form::submit('Click Me!') !!}


{!! Form::close() !!}

我做错了什么?

【问题讨论】:

  • 您的控制器名为AboutController,但您尝试访问About。

标签: php laravel laravel-5.2


【解决方案1】:

我能够解决它。 首先我必须将'action' =&gt; 'About@show' 更改为'action' =&gt; 'AboutController@show'

然后我必须在 routes.php 中注册所有控制器操作:

Route::post('contact_show', [
    'uses' => 'AboutController@show'
  ]);

Route::get('contact_create', [
    'uses' => 'AboutController@create'
  ]);

【讨论】:

    【解决方案2】:

    就是这样,因为路由文件 web.php 。请检查你的路线文件

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题。

      问题在于routes/web.php。我一次一步构建我的应用程序,因此我像这样使用'only' 将第二个数组传递给我的路由,以使其仅创建索引路由:

      Route::resource('model', 'ModelController', [
           'only' => ['index']
      ]);
      

      但在创建“创建”视图后,我无法将数据传递给控制器​​中的store 函数。我发现是因为store 函数需要显式路由(如上所述)。所以我像这样将它添加到'only' 数组中,它就像一个魅力:

      Route::resource('model', 'ModelController', [
          'only' => [
              'index',
              'create',
              'store',
          ]
      ]);
      

      (Laravel v. 7.4.0)

      【讨论】:

        【解决方案4】:

        你没有调用好的控制器!

        {!! Form::open(array('action' => 'AboutController@show', 'method' => 'post')) !!}
        

        代替:

        {!! Form::open(array('action' => 'About@show', 'method' => 'post')) !!}
        

        它正在尝试获取 About@show 操作,但您没有在控制器中这样定义它!

        希望对你有帮助!

        【讨论】:

        • 感谢您的提示。现在我得到Action App\Http\Controllers\AboutController@show not defined。只有在添加路线后才有效。
        • 您的路线应该在web.php 或routes.php 中定义,具体取决于您使用的laravel 版本:Route::get('your_route', 'AboutController@show');
        • 很有趣,因为我认为拥有action(...) 方法的意义在于我们不必显式定义路由。如果我仍然需要定义一个命名路由,为什么我还需要使用这个action 选项?个人喜好,我猜。
        • 是的,实际上,我认为从现在开始,您可以选择使用路由还是控制器。就个人而言,我发现调用控制器更明确,但这只是来自我的 POV。
        【解决方案5】:

        我遇到了类似的问题,但不是我的控制器名称错误(web.php 和实际文件名 100% 正确)。由于较早的“重构” - 它取代了我的表单操作/方法。 所以我的表单开启器看起来像这样:

        {!! Form::open(['method'=>'POST', 'action'=>'AdminBankingDetailController', 'class'=>'m-form m-form--state']) !!}
        

        而不是这样(用于创建视图/页面):

        {!! Form::open(['method'=>'POST', 'action'=>'AdminBankingDetailController@store', 'class'=>'m-form m-form--state']) !!}
        

        确保它在您的表单上有一个@action。

        【讨论】:

          【解决方案6】:

          当您收到此错误时,可能是您在 web.php 或其他操作方法中输入了错误的拼写。只需去检查拼写。

          【讨论】:

            猜你喜欢
            • 2021-02-18
            • 2021-07-08
            • 2019-05-13
            • 2019-04-13
            • 2020-04-13
            • 2017-08-13
            • 2016-12-22
            • 2020-09-15
            • 1970-01-01
            相关资源
            最近更新 更多