Laravel 4 Laravel宏未自动加载
我有以下目录结构Laravel 4 Laravel宏未自动加载,laravel-4,Laravel 4,我有以下目录结构 app | ... | lib | | Macro.php | | Events.php | ... 在我的composer.json中 "autoload": { "classmap": { ... "app/lib" ... } } Events.php在事件触发时加载并更新数据库: <?php Event::listen('auth.login', function($
app
| ...
| lib
| | Macro.php
| | Events.php
| ...
在我的composer.json
中
"autoload": {
"classmap": {
...
"app/lib"
...
}
}
Events.php
在事件触发时加载并更新数据库:
<?php
Event::listen('auth.login', function($user) {
$user->last_login = new DateTime;
$user->save();
});
我已经运行了
composer dump autoload
。为什么Macros.php
没有自动加载?composer.json中的自动加载classmap
部分只映射了:类。因此,在这个实例中它对您没有帮助,因为您在该文件中没有类声明。但是,通过将以下内容添加到“自动加载”部分,您可以使用composer自动加载文件
:
"autoload": {
"classmap": [
...
],
"files": [
"app/lib/Macros.php"
]
}
作为替代方案,您可以始终手动将该文件包含在Laravel的app/start/global.php
中,如下所示:
require app_path() . '/lib/Macros.php';
谢谢-这是一个关于自动加载文件的好提示。我仍然不明白为什么
Event::listen
有效而Form::macro
无效。如果我错了,请纠正我,但他们不是都在调用facade的静态方法吗?我已经尝试在干净的Laravel安装上模拟您的场景,除非事先加载文件,否则事件或宏都不起作用,这是意料之中的(因此,如果不以某种方式明确包含Events.php
文件,我不知道它在您的情况下如何工作)。我还注意到,我的第一个建议是使用composer自动加载文件(这是一种有效的自动加载方式)在这种情况下不起作用,因为它在外观被别名之前包含代码,并抛出“未找到类”错误。它唯一起作用的方法是将文件包含在global.php
中。你是100%对的。我只是尝试了同样的方法,得到了完全相同的结果。last\u login
正在更新,因为我最近切换了f从zizaco/Confide到cartalyst/Sentry,机制就在别处。我猜上次登录没有被记录在旧系统中,我从来没有注意到。
require app_path() . '/lib/Macros.php';