我正在尝试理解在Laravel 4中放置全局函数的最佳位置。例如,日期格式化。我不认为做一个外观是值得的,因为外观太模块化了。我读过关于创建库文件夹和在其中存储类的文章,但对于一个简单的函数来说,这似乎也很多。难道这样的“工具”不应该在刀片模板中可用吗?
这类操作的最佳实践是什么?如何使其可用于刀片模板?
发布于 2013-06-14 06:39:24
我的方法是在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
文件夹中的文件夹结构遵循您的命名空间约定即可。Laravel 4将自动加载此文件夹中的所有类/文件。这样就不需要深入研究任何composer文件或运行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'
发布于 2013-06-14 01:36:16
Laravel的helpers.php方法是将其添加到composer.json (https://github.com/laravel/framework/blob/master/composer.json)中的“文件”中:
"autoload": {
"classmap": [
...
],
"files": [
"app/libraries/helpers.php"
],
},
我所做的是创建小类(每个类有几个方法,每个方法一行,所有东西都是从某些东西扩展而来的,这就是我的目标),
class ExtendedCarbon extends Carbon\Carbon {
public function formatDDMMAAAA($date)
{
/// format and return
}
}
将它们保存到应用程序/库中,并添加到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)的实例,而且它有很多格式化日期和时间的方法。
发布于 2014-07-31 22:38:01
您也可以将View::share()
与闭包结合使用来实现这一点--我刚刚发布了:http://www.develophp.org/2014/07/laravel-4-blade-helper-functions/
增加的好处:您不需要创建额外的类,还可以保持全局名称空间的整洁。
https://stackoverflow.com/questions/17088917
复制相似问题