Answers:
丑陋,懒惰和糟糕的方式:在的末尾bootstrap/start.php
,添加一个include('tools.php')
并将您的函数放置在该新文件中。
干净的方法:创建一个库。这样,只有在您实际使用它时,它才会自动加载。
libraries
文件夹内创建一个文件app
夹start/global.php
以添加app_path().'/libraries'
到ClassLoader::addDirectories(
阵列。composer.json
以添加"app/libraries"
到autoload
阵列。跑composer dump-autoload
关于您的选择,引用自global.php
文件
除了使用Composer,您还可以使用Laravel类加载器加载控制器和模型。这对于在不更新Composer的情况下将所有类保留在“全局”名称空间中很有用。
您可以组合使用这两个选项,其中Laravel类加载器将自动在注册目录中搜索类(选项1,更容易),而Composer会保留所有类的记录,但只有在您对其进行更新之后(选项2,才可以提高性能)。
sitehelpers.php
我的方法是/app
在Laravel 4项目根目录下的目录中创建一个新文件夹。然后将此文件夹添加到文件的第一个数组中,/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'
composer dump-autoload
-我做了,花了20分钟挠头。
Laravel的helpers.php方法是将其添加到composer.json(https://github.com/laravel/framework/blob/master/composer.json)中的“文件”中:
"autoload": {
"classmap": [
...
],
"files": [
"app/libraries/helpers.php"
],
},
我要做的是创建小型类(每个类几个方法,每个方法一行,从某物到DRY的所有扩展,这就是我的目标),
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)和它有许多格式化日期和时间的方法。
formatDDMMAAAA()
as static
。
您也可以View::share()
将其与闭包一起使用以实现此目的-我刚刚发布了以下内容:http : //www.develophp.org/2014/07/laravel-4-blade-helper-functions/
额外的好处:您无需创建额外的类,也无需保持全局名称空间的整洁。
app_path().'/library'
在start / global.php中。