在Laravel中遇到psr-4自动加载问题

时间:2014-05-28 17:34:53

标签: php laravel composer-php autoload psr-4

好的,我的Laravel应用程序中有一个项目文件夹。名为TLGD(如果我的网站名称)。在里面我创建了一个表单验证帮助器,用于从控制器中删除不必要的代码。

这是文件夹结构:

TGLD\Validation\Forms

在这里我有我的表单助手类

现在在控制器中只是为了测试它我通过使用php中的方法调用类,如下所示:

use TGLD\Validation\Forms\Login;

login是登录验证的类

现在效果很好,所以我尝试自动加载TGLD文件夹,所以我不需要在每个控制器中添加使用行。这是我的composer.json文件

"autoload": {
    "classmap": [
        "app/commands",
        "app/controllers",
        "app/models",
        "app/database/migrations",
        "app/database/seeds",
        "app/tests/TestCase.php"
    ],
    "psr-4": {
        "TGLD\\": "app/TGLD"
    }
},

但是当我自动加载它时,它给我一个错误,我的登录类不存在,这意味着自动加载器不工作。是否存在语法错误或我遗漏了什么?我跑了

composer dump-autoload -o

以及任何建议都有用,谢谢你提前

1 个答案:

答案 0 :(得分:0)

你想做的事情无法完成。

您必须在某处使用完整的命名空间来标识要使用的类。你有几个选择来做这个

  1. 使用带有名称空间的类的完全限定名称,如下所示:new \TGLD\Validation\Forms\Login()
  2. 使用use子句将指定的类导入此文件的当前命名空间use TGLD\Validation\Forms\Login; ... new Login();
  3. 使用use中的部分命名空间,并使用类名中的其余部分:use TGLD\Validation\Forms; ... new Forms\Login();
  4. 在以某种方式选择类名后,PHP知道它需要哪个类,然后如果PHP仍然不知道该类,则触发自动加载。

    因此,您无法通过自动加载影响类的命名。