【问题标题】:Laravel Controller doesn't exist, even though it clearly existsLaravel Controller 不存在,尽管它显然存在
【发布时间】:2014-06-13 13:19:46
【问题描述】:

我得到的错误是控制器不存在,即使我知道它存在,这里是代码。

Route.php

Route::get('mdpay/template', array("uses" => "templateController@index"));

templateController.blade.php

class templateController extends BaseController {

  public function index()
  {
    echo "made it";
  }


}

为什么我会收到此错误:类 TemplateController 不存在

==================更新:==================

好的,所以我已经创建了正确的路线,重命名了我的文件,并更正了类名,但我仍然想出了那个错误。

文件名:

模板控制器.php

// File Name: TemplateController.php
class TemplateController extends BaseController {
    public function index()
    {
        // app/views/myView.blade.php
        echo "hello";
    }
}

我的路线是:

Route::get('mdpay/template', array("uses" => "TemplateController@index"));

仍然收到控制器不存在错误。除了这个之外,我所有的其他控制器(另外 3 个)都在工作。

【问题讨论】:

  • 重命名 templateController.blade.phptemplateController.php 刀片用于视图,而不是控制器。
  • 您的控制器在子文件夹中吗?尝试从 \BaseController 扩展,并带有前导 ` \ `。
  • 重命名控制器或任何类时会出现此问题。您也不能使用 php artisan route:list 它不会工作,因为它不会在您重命名控制器类时匹配控制器类。您还需要自动加载所有类,包括重命名的控制器。所以你应该使用composer dumpautoload。它将重新生成所有自动加载类。

标签: php laravel laravel-4


【解决方案1】:

如果您使用的是标准 composer classmap 自动加载器,则每次创建新文件时都需要composer dumpautoload

所以要使用 Laravel 提供的标准作曲家设置创建一个新控制器:

  1. app/controllers 中创建一个名为TemplateController.php 的新文件
  2. 打开终端运行composer dumpautoload

正如之前的用户所说,只有查看文件应该以.blade.php结尾。

【讨论】:

  • 是 dumpautoload 修复了它。我正在使用作曲家。没有意识到每次制作控制器时我都需要。我正在从 phpstorm 远程开发。
【解决方案2】:

如果您使用的是 Laravel 8,请将此行添加到您的 RouteServiceProvider.php(您可以使用 CTRL + P 搜索它):

protected $namespace = 'App\Http\Controllers';

这解决了我的问题。

【讨论】:

    【解决方案3】:

    应该是:

    // File Name: TemplateController.php
    class TemplateController extends BaseController {
        public function index()
        {
            // return "made it"; // or
            // app/views/myView.blade.php
            return View::make('myView');
        }
    }
    

    路线:

    Route::get('mdpay/template', array("uses" => "TemplateController@index"));
    

    Blade view 中使用blade,即:myView.blade.php 基本上存储在app/views/ 文件夹中。在Laravel 网站上阅读有关blate template 的更多信息。

    【讨论】:

    • 大声笑...@itachi,一切顺利:-)
    • 我已经更新了我的问题和代码,因为在使用此修复程序后我仍然收到该错误。我还有其他 3 个可以工作的控制器,只是这个不奇怪。
    • 您是否使用TemplateController.php 作为您的控制器名称?
    • @jamadri,也可以在命令提示符下运行composer dump-autoload
    • @WereWolf 代码很好,需要运行的是 composer dumpautoload 命令。
    【解决方案4】:

    控制器位于app/controllers 目录中,除非您有自己的命名空间结构,否则应该保留在那里。

    您获得Class TemplateController does not exist 的原因是因为它没有,首先,您的类称为templateController,其次,它以templateController.blade.php 的形式存在,不会以这种方式加载。

    刀片文件用于视图,只有 app/views 或自定义视图目录中的视图应以 .blade.php 结尾。

    创建文件app/controllers/TemplateController.php 并在其中添加以下代码。

    class TemplateController extends BaseController {
    
        public function index()
        {
            echo "made it";
        }
    
    }
    

    现在在命令行上,运行命令composer dumpautoload 并将您的路由声明更改为:

    Route::get('mdpay/template', array('uses' => 'TemplateController@index"));
    

    现在应该一切正常了。

    【讨论】:

      猜你喜欢
      • 2014-12-23
      • 2017-10-17
      • 1970-01-01
      • 2015-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-12
      相关资源
      最近更新 更多