使用自定义类找不到CakePHP类

时间:2018-06-05 11:30:24

标签: php cakephp-3.0

我刚刚开始使用CakePHP 3.我正在尝试启动并运行,但做最简单的事情证明是一件令人头痛的问题。

我在src/App/MySimpleClass.php

中有一个MySimpleClass类
<?php
    namespace MyApp\MyNamespace;

    class MySimpleClass {
        public function aSimpleFunction() {
            return 1;
        }
    }

在我的控制器中:

<?php
    namespace App\Controller;

    use Cake\Controller\Controller;
    use MyApp\MyNamespace\MySimpleClass;

    class MyFirstController extends Controller {

        public function display() {
            $mySimpleClass = new MySimpleClass();
            echo $mySimpleClass->aSimpleFunction();
        }
    }

但这总是让我: Error in: ROOT/src/Controller/TestController.php, line 10 Class 'MyApp\MyNamespace\MySimpleClass' not found

我使用bin/cake server来运行HTTP服务器

我将App::className('MyApp\MyNamespace\MySimpleClass');添加到bootstrap.php以查看是否会产生影响,但事实并非如此。

我已多次运行composer dump-autoload

我尝试将MySimpleClass放入全局命名空间,但它仍然给了我错误。

PHPStorm没有给我任何语法或命名错误。

3 个答案:

答案 0 :(得分:0)

您应该将控制器放在:

SRC /控制器

并使用:

namespace App\Controller;

答案 1 :(得分:0)

没关系,我终于找到了解决方案......

我只需将src添加到composer.json中的类图:

"autoload": {
    "classmap": [
        "src"
    ],
    ...,
}

编辑:

我没有滥用类图,而是将我的类文件移动到src以外的目录

答案 2 :(得分:0)

如果您的类位于文件src / App / MySimpleClass.php中,则命名空间必须为12。第一个App\App引用每个CakePHP 3.x应用程序的根命名空间,第二个App引用您放置类文件的App目录中的子目录。

如果类的名称空间应为src,则您的类文件必须位于App\MyNamespace

另外:根据您引用的错误消息,您的MyFirstController位于名为TestController.php的文件中。相反,它应该是MyFirstController.php。我建议给https://book.cakephp.org/3.0/en/intro/conventions.html#file-and-class-name-conventions一个关于这个主题的阅读。