2016-05-24 12 views
0

静的メソッドの使用について、より深く理解したいと思います。私は自分のアプリケーションにlaravel 5.2フレームワークを使用しています。主に私は例えば、静的な関数を使用していた私のアプリケーションでlaravelが静的アクセスを使用しないようにするために必要な説明

ポストとメソッド名がget_postされるように私は(モデルクラス名を持っている)と私はlaravelにstaticキーワードを逃した場合にのみ、そのstaticとして宣言それは

class Post extends Eloquent(){ 

    public static function get_post(){ 
     return DB::table('post')->get(); 
    } 
} 
エラーをスローします私のコントローラで

は、私は、静的として、このメソッドを呼び出すために避けることができどのよう

Post::get_post() 

この上記のメソッドを呼び出しますか? PHPMD 1.4.0ルール

誰でも明確に説明してください。

答えて

1

LaravelのEloquentが静的メソッドを介して呼び出されるため、これを避ける方法がわかりません。ところで、代わりにあなたが書いた機能のうち、あなたはもちろん

Post::all(); 

を書くことができます別の抽象化の可能性はリポジトリコントローラが直接モデルの関数を呼び出していないパターン、のではなく、

のようなものを使用することです $postRepositoryは、例えばをやっLaravelの雄弁モデルに重い物を持ち上げるの一部を行うだろう
$activePosts = $postRepository->getActiveAndApproved(); 

->where('something', true)とそのようなもの - Symfonyには、既にフレームワークに含まれているこの機能があります。

詳細な手順については、https://bosnadev.com/2015/03/07/using-repository-pattern-in-laravel-5/を参照してください。

Laravelはサービスコンテナの機能にアクセスするための簡略化されたファサード(例えば、config/app.phpまたはhttps://laravel.com/docs/5.2/facadesを参照してください)を参照すると、静的関数呼び出しを避けるのは難しいかもしれません。

+0

静的メソッド呼び出しをリポジトリに移動しても、ファサード(または静的メソッド)の使用は変更されず、別の場所に移動されます。 – datashaman

関連する問題