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';