laravel 4助手或基本function的最佳实践和最佳场所是什么?

所以我想要了解在laravel 4中放置全局函数的最佳位置。例如:date格式。 我不认为build立一个门面是值得的,门面太模块化。 我已经阅读了关于创build一个库文件夹和存储类的文章,但是对于一个简单的函数来说,这也看起来很重要。 而且,刀片模板中不应该有像这样的“工具”吗?

什么是这样的最佳做法? 我该如何将它提供给刀片模板?

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

干净的方式:创build一个库。 这样,只有在实际使用它时才会自动加载。

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

关于你的选项,从global.php文件引用

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

你可以组合两个选项,Laravel类加载器将自动search注册目录中的类( 选项1 ,更简单),Composer将保留所有类的logging,但只有在更新后( 选项2可能会提高性能)。

我这样做的方法是在你的Laravel 4项目的根目录下的/app目录中创build一个新文件夹。 然后将此文件夹添加到/app/start/global.php文件的第一个数组中, /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 php文件或运行composer php命令。

不知道这是否是最好的做法,但肯定是有效的。

如果你创build了一个叫做/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' 

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

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

我所做的是创build小类(每个类有几个方法,每个方法只有一行,所有东西都是从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); 

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

顺便说一下,我确信这仅仅是一个例子,但是你可能不需要帮助者来格式化date,因为Laravel中的所有date都是Carbon的实例( https://github.com/briannesbitt/Carbon ),它有加载格式date和时间的方法。

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

增加的好处:你不需要创build一个额外的类,并保持全局名称空间干净。