我刚开始使用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没有给我任何语法或命名错误。
发布于 2018-06-05 23:42:44
你应该把你的控制器放在:
源/控制器
并使用:
namespace App\Controller;发布于 2018-06-06 01:11:30
不要紧,我终于找到解决方案了。
我只需要在composer.json中将src添加到类映射
"autoload": {
"classmap": [
"src"
],
...,
}编辑:
我没有滥用类映射,而是将类文件移动到src之外的一个目录中
发布于 2018-06-07 23:23:39
如果您的类位于文件src/App/MySimpleClass.php中,则名称空间必须为App\App。第一个App引用每个CakePHP 3.x应用程序的根名称空间,第二个App引用您放置类文件的src目录中的子目录。
如果类的命名空间应为App\MyNamespace,则类文件必须位于src/MyNamespace中。
另外:根据您引用的错误消息,您的MyFirstController在一个名为TestController.php的文件中。相反,它应该是MyFirstController.php。关于这个话题,我建议给https://book.cakephp.org/3.0/en/intro/conventions.html#file-and-class-name-conventions读一读。
https://stackoverflow.com/questions/50699008
复制相似问题