我使用symfony 2.4.0。我想使用我在此讨论的自定义类:Autoloading a class in Symfony 2.1。我在src
创建了子文件夹:
namespace Yur;
class MyClass {
public go() {
var_dump('hello!! 32');
}
}
在我的控制器中,我做到了:
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Yur\MyClass;
class WelcomeController extends Controller
{
public function indexAction()
{
$my = new MyClass();
$my->go();
die();
...
但它有例外:
ClassNotFoundException:尝试从/var/www/shop.loc/src/Acme/DemoBundle/Controller/WelcomeController.php第12行中的命名空间“Yur”加载类“MyClass”。是否需要“使用” “它来自另一个名称空间?
在我遇到这个异常之后,我决定有意识地在我的班级中发出syntax error
异常以查看它是否已加载。我将class MyClass ...
更改为class4 MyClass ...
,但没有t got a
语法错误`异常。我决定,我的班级没有加载。
有谁知道为什么?我必须做些什么才能解决?
答案 0 :(得分:4)
一些事情。首先,在上面的代码示例中,您有
public go() {
var_dump('hello!! 32');
}
应该是
public function go() {
var_dump('hello!! 32');
}
前者在PHP中引发了解析器错误。而且可能不是你想要的。
第二,错误
ClassNotFoundException:尝试从/var/www/shop.loc/src/Acme/DemoBundle/Controller/WelcomeController.php第12行中的命名空间“Yur”加载类“MyClass”。您是否需要从“使用”它另一个命名空间?
是Symfony在尝试自动加载类时使用的错误,但无法找到该文件。这通常意味着您的文件名称不正确,或者名称错误。我绊倒了检查你认为你在目录中有一个文件。
$ ls src/Yur/MyClass.php
您还可以为作曲家自动加载代码添加一些调试,以查看它为您的自定义类准备的路径
#File: vendor/composer/ClassLoader.php
public function findFile($class)
{
//...
$classPath .= strtr($className, '_', DIRECTORY_SEPARATOR) . '.php';
//start your debugging code
if($class == 'Yur\MyClass')
{
//dump the generated path
var_dump($classPath);
//dump the default include paths
var_dump($this->fallbackDirs);
}
//...
}