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

我在试图理解在 Laravel 4中放置全局函数的最佳位置。例如,日期格式化。我不认为做一个立面是值得的,因为立面太模块化了。我读过关于创建库文件夹和存储类的文章,但是对于一个简单的函数来说,这似乎也太多了。这样的“工具”不是应该在 Blade 模板中提供吗?

对于这样的事情,最好的做法是什么? 我如何使它可用于 Blade 模板?

53772 次浏览

丑陋、懒惰和可怕的方法: 在 bootstrap/start.php的末尾,添加一个 include('tools.php'),并将函数放在那个新文件中。

干净的方法: 创建一个库。这样只有当你真正使用它的时候它才会自动加载。

  • app文件夹中创建一个 libraries文件夹
  • 创建库文件,在其中创建类,并向其添加静态函数
  • 选项1 : 编辑 start/global.phpapp_path().'/libraries'添加到 ClassLoader::addDirectories(数组。
  • 选项2 : 编辑 composer.json"app/libraries"添加到 autoload数组
  • 从视图中调用类和静态函数。

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

除了使用 Composer 之外,您还可以使用 Laravel 类装入器来 加载您的控制器和模型 您的类在“全局”命名空间中,而不需要更新 Composer。

你可以组合这两个选项,Laravel 类装入器将自动搜索注册目录中的类(选择一,更简单) ,Composer 将保留所有类的记录,但只有在你更新它之后(选择二,可能会提高性能)。

Laravel 的 helpers.php 方法是将其添加到 comper.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/library 中并添加到 poser.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)的实例,它有很多方法来格式化日期和时间。

我的方法是在 Laravel4项目的根目录中的 /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文件夹中的文件夹结构遵循命名空间约定。Laravel4将自动加载该文件夹中的所有类/文件。这样就不需要深入研究任何作曲家文件或运行作曲家命令。

不确定这是否是最佳实践,但它肯定是有效的。

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

<?php namespace Helpers;


class Helper {


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

所有你需要做的就是调用 Helpers\Helper::helloWorld();

您也可以在 /app/config/app.php文件中使用这个 helper 类的别名。只需在 aliases数组的末尾添加这样的代码:

'Helper'          => 'Helpers\Helper'

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

额外的好处: 不需要创建额外的类,也不需要保持全局名称空间的整洁。