我一直试图让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)
)。
答案 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中使用它。