【问题标题】:Laravel 4 : Where to put model helper methods?Laravel 4:在哪里放置模型辅助方法?
【发布时间】:2014-11-06 00:46:56
【问题描述】:

在哪里放置 Laravel Eloquent 模型的辅助方法的最佳位置?

目前我正在创建一个扩展EloquentBaseModel 并在其中添加额外的功能。然后我所有的模型都扩展BaseModel。它有效..但感觉不对。

例如是我目前的 BaseModel...

class BaseModel extends Eloquent {

protected static function getEnumValues($table, $field)
{

    $test=DB::select(DB::raw("show columns from {$table} where field = '{$field}'"));

    preg_match('/^enum\((.*)\)$/', $test[0]->Type, $matches);
    foreach( explode(',', $matches[1]) as $value )
    {
        $enum[] = trim( $value, "'" );
    }

    return $enum;
}

protected static function convertDate($date)
{
    if(!isset($date)) return;
    $new_date = DateTime::createFromFormat('d/m/Y', $date);
    $formated_date = $new_date->format('Y-m-d');
    return $formated_date;
}

}

我在我的模型中使用它们...

    public static function boot()
    {
        parent::boot();

        static::creating(function($campaign)
        {
            $campaign->sale_date = static::convertDate($campaign->sale_date);
            $campaign->sold_date = static::convertDate($campaign->sold_date);
        });
    }

这样的模型辅助方法最好放在哪里?

感谢反馈,谢谢!

【问题讨论】:

    标签: laravel laravel-4 eloquent


    【解决方案1】:

    您可以编写一个静态助手类,然后从您的模型中调用它。 如何添加自定义类可以参考my blog post。或者你总是可以使用 psr-0 或 psr-4 来使用 composer autoload

    【讨论】:

    • 谢谢你,刚刚快速浏览了这篇文章。我已经按照你的建议添加了一个“libraries”文件夹并在其中放置了辅助方法。但是......我准备好在某个地方这样做只是为了查看帮助方法,虽然你是对的......我不明白为什么我不能制作一个模型助手类!谢谢
    【解决方案2】:

    我所做的是...我在里面和里面创建了一个 Helper Directory 我创建了一个 GlobalHelper.php 文件。

            app/Helper/GlobalHelper.php
      
    

    在 GlobalHelper.php 中

        namespace App\Helper;
        use App\Command;
    
        class GlobalHelper{
             public static function getCommands(){
                  $getCommands = Command::all();
                  return $getCommands;                        
           }
       }
    

    比在控制器或任何地方调用这样的:

         use App\Helper\GlobalHelper;
    
         $getCommands = GlobalHelper::getCommands();
    

    【讨论】: