Symfony自定义类自动加载不起作用

时间:2013-12-27 01:30:26

标签: php symfony

我使用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语法错误`异常。我决定,我的班级没有加载。 有谁知道为什么?我必须做些什么才能解决?

1 个答案:

答案 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);
    }

    //...
}