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 中的自动加载助手的主要内容,如果未能解决你的问题,请参考以下文章

自动添加自动加载

Laravel 加载并初始化自定义助手类

自动加载帮助文件夹 Laravel 5

Laravel psr-4 不自动加载

如何在 Laravel 4 中自动加载 Guzzle?

php #laravel中的自动加载帮助程序