在laravel 4中自动装载助手

时间:2013-06-21 15:35:37

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

我一直试图让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 个答案:

答案 0 :(得分:9)

您需要执行以下操作:

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

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

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

答案 1 :(得分:3)

自动加载仅适用于类,您无法根据其中一个函数名自动加载随机php文件。

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

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

答案 2 :(得分:0)

嗯......我可以告诉你我的作曲家和助手,以展示我是如何让它发挥作用的:

"autoload": {

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

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

<?php namespace Helpers;

class DateHelper extends \DateTime {


}

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

  

composer dump-autoload

现在只需使用助手作为Helpers \ DateHelper

答案 3 :(得分:0)

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