Laravel 4助手和基本功能的最佳实践?

我正在尝试理解在Laravel 4中放置全局函数的最佳位置 . 例如,日期格式化 . 我不认为制作外立面是值得的,因为外墙过于模块化 . 我已经阅读了有关创建库文件夹和存储类的文章,但对于一个简单的函数来说,这似乎也很多 . 刀片模板中不应该有这样的“工具”吗?

对于类似这样的事情有哪些最佳实践?如何将其提供给Blade模板?

回答(4)

2 years ago

丑陋,懒惰和可怕的方式:在 bootstrap/start.php 结束时,添加 include('tools.php') 并将您的函数放在该新文件中 .

干净的方式:创建一个库 . 这样它只会在您实际使用时自动加载 .

  • app 文件夹中创建 libraries 文件夹

  • 创建库文件,在其中创建一个类,并向其中添加静态函数

  • 选项1:编辑 start/global.phpapp_path().'/libraries' 添加到 ClassLoader::addDirectories( 数组 .

  • 选项2:编辑 composer.json"app/libraries" 添加到 autoload 数组 . 运行 composer dump-autoload

  • 从您的视图中调用您的类和静态函数 .

关于您的选项,引自 global.php 文件

除了使用Composer之外,您还可以使用Laravel类加载器来加载控制器和模型 . 这对于在没有Composer更新的情况下将所有类保留在“全局”命名空间中非常有用 .

您可以将两个选项组合在一起,Laravel类加载器将自动搜索已注册目录中的类(选项1,更容易),并且Composer将保留所有类的记录,但只有在您更新之后(选项2,可能会提高性能) .

2 years ago

我这样做的方法是在Laravel 4项目的根目录中的 /app 目录中创建一个新文件夹 . 然后将此文件夹添加到 /app/start/global.php 文件的第一个数组中,如下所示:

<?php

ClassLoader::addDirectories(array(

app_path().'/commands',
app_path().'/controllers',
app_path().'/models',
app_path().'/database/seeds',
app_path().'/classes', // This line is the one I've added.

));

只要新 /app/classes 文件夹中的文件夹结构遵循您的命名空间约定 . Laravel 4将自动加载此文件夹中的所有类/文件 . 这样就不需要深入研究任何作曲家文件或运行composer命令 .

不确定这是否是最佳做法,但它确实有效 .

如果您创建了一个名为 /app/classes/Helpers/Helper.php 的简单文件,例如:

<?php namespace Helpers;

class Helper {

    public static function helloWorld()
    {
        return 'Hello World';
    }
}

您需要做的就是致电 Helpers\Helper::helloWorld();

您也可以在 /app/config/app.php 文件中为此助手类别名 . 只需在 aliases 数组的末尾添加这样的内容:

'Helper'          => 'Helpers\Helper'

2 years ago

Laravel的helpers.php方法是将它添加到composer.json(https://github.com/laravel/framework/blob/master/composer.json)中的"files":

"autoload": {
    "classmap": [
        ...
    ],
    "files": [
        "app/libraries/helpers.php"
    ],
},

我所做的是创建小类(每个类有几个方法,每个方法一行,从某些东西延伸到DRY,这是我的目标),

class ExtendedCarbon extends Carbon\Carbon {

    public function formatDDMMAAAA($date)
    {
        /// format and return
    }

}

在app / libraries中将它们保存到它们并添加到composer.json:

"autoload": {
    "classmap": [
        ...
        "app/libraries",
        ...
    ],
},

执行

composer dump

然后只需在任何需要的地方使用它们

$formatted = (new ExtendedCarbon)->formatDDMMAAAA($date);

观看有关重构的视频:http://www.youtube.com/watch?v=DC-pQPq0acs

顺便说一下,我确信它只是一个例子,但你可能不需要帮助器来设置日期格式,因为Laravel中的所有日期都是Carbon的实例(https://github.com/briannesbitt/Carbon),它有大量的方法来格式化日期和时间 .

2 years ago

您也可以使用 View::share() 和闭包来实现这一点 - 我刚刚发布了这个:http://www.develophp.org/2014/07/laravel-4-blade-helper-functions/

增加的好处:您不需要创建额外的类,也可以保持全局命名空间清洁 .