在 Laravel 中无法自动加载 psr-4
Posted
技术标签:
【中文标题】在 Laravel 中无法自动加载 psr-4【英文标题】:having trouble psr-4 autoloading in Laravel 【发布时间】:2014-07-18 01:41:12 【问题描述】:好的,我的 Laravel 应用程序中有一个项目文件夹。命名为 TLGD(如果我的站点的名称)。在里面我创建了一个表单验证助手,用于从控制器中删除不必要的代码。
这是文件夹结构:
TGLD\Validation\Forms
在里面我有我的表单助手类
现在在控制器中只是为了测试它,我通过 php 中的 use methd 调用类,如下所示:
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
任何建议都是有帮助的,提前谢谢你
【问题讨论】:
自动加载!=use
。您仍然需要使用use
语句。你可以做的是为你的表单验证器设置一个别名,但我不会这样做。
没有其他方法可以做到,所以我不需要要求所有 y 控制器都使用?
都是关于命名空间php.net/manual/en/language.namespaces.php,所以基本上没有。您可以在 app/config/app.php
中为您的 Laravel 应用程序设置别名,但就像我说的,我不会那样做。
【参考方案1】:
你想做的事是做不到的。
您必须在某处使用完整的命名空间来标识您要使用的类。你有几个选择来做到这一点
-
使用具有如下命名空间的类的完全限定名称:
new \TGLD\Validation\Forms\Login()
。
使用use
子句将命名类导入此文件的当前命名空间use TGLD\Validation\Forms\Login; ... new Login();
在use
中使用命名空间的一部分,在类名中使用其余部分:use TGLD\Validation\Forms; ... new Forms\Login();
在您以一种或另一种方式选择类名后,PHP 知道它需要哪个类,然后如果 PHP 仍然不知道该类,则触发自动加载。
所以你不能通过自动加载来影响类的命名。
【讨论】:
以上是关于在 Laravel 中无法自动加载 psr-4的主要内容,如果未能解决你的问题,请参考以下文章