laravel 4 中的自动加载助手
Posted
技术标签:
【中文标题】laravel 4 中的自动加载助手【英文标题】:Auto-loading Helpers in laravel 4 【发布时间】:2013-06-18 19:33:06 【问题描述】:我一直在尝试让 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)
)。
【问题讨论】:
您有任何代码,以便我们更好地了解您要加载的文件中的内容吗? 只是一个简单的函数:theme_path($location)
,它返回Config::get('site.theme') . "/$location"
。
【参考方案1】:
嗯...我可以向您展示我的作曲家和助手,以展示我是如何使其工作的:
"autoload":
"psr-0":
"Helpers": "app/libraries"
然后在 app/libraries/Helpers/DateHelper.php 中(例如)
<?php namespace Helpers;
class DateHelper extends \DateTime
创建帮助文件后,我只需运行
作曲家转储自动加载
现在只需将您的助手用作 Helpers\DateHelper
【讨论】:
就像我说的,我没有在这里使用类。只是功能。【参考方案2】:与您的问题没有直接关系,但 Laravel 集成了 Carbon 库 (https://github.com/briannesbitt/Carbon) 用于日期处理。它在vendor/nesbot
文件夹中,所以你可以直接在 Laravel 中使用它。
【讨论】:
【参考方案3】:您需要执行以下操作:
"autoload":
"files": [
"file location go here"
]
,
然后您就可以使用帮助文件中的功能了。但是值得注意的是,这将在每个请求上显式加载文件。详情请见http://getcomposer.org/doc/04-schema.md#files。
我建议除非这是一个大量使用的帮助文件,否则请避免这样做,只需使用名称空间和类来组织它以避免命名冲突。
【讨论】:
该死,所以我不能让它与目录一起工作?我想这似乎是合理的 - 此外,不会有那么多帮助文件...... 您也可以遍历文件目录并使用 require,因为文件 composer autoload 模式中的每个文件都等同于 composer 生成的 autoload_real.php 中的 require 语句。【参考方案4】:自动加载仅适用于类,您不能真正根据函数名称之一自动加载随机 php 文件。
您最好的选择是使用 OOP 并为您的助手使用课程。只有在需要时,您才能获得自动加载文件的效率,并且您将更接近 Laravel 社区的其他成员所做的事情。
但是如果你仍然想使用普通的旧的非对象 php 函数,我想你可以简单地从 start.php 中单独 require()
所有这些函数,但它们都会在每个页面请求上加载。
【讨论】:
好的,我决定采用 OOP 方法。我确实知道这样会更好,但是一些最终用户会感到很困惑——我真的只是想让他们的事情变得更容易一些。因此,结合您的建议,我正在扩展模板引擎,以便为我的最终用户提供更多功能。以上是关于laravel 4 中的自动加载助手的主要内容,如果未能解决你的问题,请参考以下文章