在php Laravel 5中创建自定义帮助函数的最佳实践是什么?

kyo*_*kyo 18 php view-helpers laravel laravel-5

我有

默认的created_at日期保持打印为MySQL格式:2015-06-12 09:01:26 我想以自己的方式打印它12/2/2017,以及将来的其他格式.


我建立

一个文件调用DataHelper.php并存储在/app/Helpers/DateHelper.php- 它看起来像这样

<?php

namespace App\Helpers;

class DateHelper {

    public static function dateFormat1($date) {
        if ($date) {
            $dt = new DateTime($date);

        return $dt->format("m/d/y"); // 10/27/2014
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

我想要

能够在我的刀片视图中调用它

DateHelper::dateFormat1($user->created_at)
Run Code Online (Sandbox Code Playgroud)

我不知道下一步该做什么.

在php Laravel 5中创建自定义帮助函数的最佳实践是什么?

kyo*_*kyo 17

  1. 在您的app/Http目录中,创建一个helpers.php文件并添加您的功能.
  2. composer.json,在该autoload块,添加"files": ["app/Http/helpers.php"].
  3. composer dump-autoload

应该这样做.:)

  • @ihue关闭主题,但如果你复制某人的想法/帖子,你至少应该提到你找到它的原始网址......这是我猜的最初Jeffrey Way的建议.https://laracasts.com/discuss/channels/general-discussion/best-practices-for-custom-helpers-on-laravel-5?page=1 (2认同)

Eme*_*bah 13

由于你的Helper方法是静态的,你可以config/app像使用Facade一样将你的助手类添加到别名中,如下所示:

'aliases' => [
    //'dateHelper'=> 'App\Helpers\DateHelper', //for Laravel 5.0
    'dateHelper'=> App\Helpers\DateHelper::class, //for Laravel 5.1
] 
Run Code Online (Sandbox Code Playgroud)

然后在你看来:

{{dateHelper::dateFormat1($user->created_at)}}
Run Code Online (Sandbox Code Playgroud)

但是,如果您还在寻找一种没有辅助类的方法.您可以考虑在模型中使用Mutators和Appends:

class User extends Model{
   protected $fillable = [
     'date'
   ];

   protected $appends = [
     'date_format_two'
   ];


   public function getDateAttribute($value){
        $dt = new DateTime($value);
        return $dt->format("m/d/y"); // 10/27/2014
   }

    //date
    public function getDateFormatTwoAttribute($value){
        $dt = new DateTime($value);
        return $this->attributes['date_format_two'] = $dt->format("m, d ,y"); // 10,27,2014
    }
} 
Run Code Online (Sandbox Code Playgroud)

以后你可以做

$user = User::find(1);

{{$user->date}}; 
{{$user->date_format_two}}; 
Run Code Online (Sandbox Code Playgroud)

  • 我认为这是一个比接受更明确的答案 (3认同)