首页 文章

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

提问于
浏览
145

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

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

4 回答

  • 82

    丑陋,懒惰和可怕的方式:在 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,可能会提高性能) .

  • 7

    我这样做的方法是在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'
    
  • 25

    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),它有大量的方法来格式化日期和时间 .

  • 231

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

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

相关问题