4

我一直在尝试让 Laravel 4 从app/helpers目录中自动加载帮助文件(显然是我创建的)。

我从 Composer 的方式开始:将路径添加到composer.json,然后运行dump-autoload​​. 这没有用。然后我尝试使用该app/start/global.php文件,该文件也不起作用。

请注意,我不会将类放入帮助文件中——这就是 Facades 和 Packages 的用途。我只需要小的辅助函数,类似于 Laravel 自己的(在vendor目录中)。我之所以这么说,是因为作曲家似乎只转储了类(带有命名空间)。

我该怎么做才能让助手自动加载?

更新

似乎该ClassLoader::addDirectories()功能也不适用于类 - 为什么它在那里?我必须同时使用这个和 Composer 吗?

编辑

看来我的问题没有被理解。在我的app/helpers目录中,我有一个名为paths.php. 我希望能够theme_path($location)在全局范围内调用它()内的一个函数。

4

4 回答 4

9

您需要执行以下操作:

"autoload": {
    "files": [
        "file location go here"
    ]
},

然后,您将能够使用帮助文件中的功能。但是值得注意的是,这将在每个请求上显式加载文件。有关详细信息,请参阅http://getcomposer.org/doc/04-schema.md#files 。

我建议除非这是一个大量使用的助手文件,否则请避免这样做,只需使用名称空间和类来组织它以避免命名冲突。

于 2013-06-22T08:39:51.573 回答
3

自动加载仅适用于类,您不能真正根据函数名称之一自动加载随机 php 文件。

您最好的选择是使用 OOP 并为您的助手使用课程。只有在需要时,您才能获得自动加载文件的效率,并且您将更接近 Laravel 社区的其他成员所做的事情。

但是,如果您仍然想使用普通的旧的非对象 php 函数,我想您可以简单地require()从 start.php 中单独所有这些函数,但它们都会在每个页面请求上加载。

于 2013-06-22T10:37:31.797 回答
0

好吧...我可以向您展示我的作曲家和助手,以展示我是如何使其工作的:

"autoload": {

    "psr-0": {
        "Helpers": "app/libraries"
    }
}

然后在 app/libraries/Helpers/DateHelper.php (例如)

<?php namespace Helpers;

class DateHelper extends \DateTime {


}

创建帮助文件后,我只运行

作曲家转储自动加载

现在只需将您的助手用作 Helpers\DateHelper

于 2013-06-21T16:39:10.980 回答
0

与您的问题没有直接关系,但 Laravel 集成了 Carbon 库 ( https://github.com/briannesbitt/Carbon ) 用于日期处理。它在vendor/nesbot文件夹内,所以你可以直接在 Laravel 中使用它。

于 2013-06-21T17:40:14.587 回答