我刚刚开始使用CakePHP 3.我正在尝试启动并运行,但做最简单的事情证明是一件令人头痛的问题。
我在src/App/MySimpleClass.php
<?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没有给我任何语法或命名错误。
答案 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一个关于这个主题的阅读。