0

私はプロジェクトに取り組んでいます。さまざまなルートでいくつかの基本的な値が必要です。たとえば、さまざまなページ/ルートでユーザー、場所、製品のリストを表示します。したがって、ユーザーのリストを表示したい場所など、これらの共通のメソッドを作成したかったので、ユーザーのメソッドを呼び出して、このリストをビューに渡します。

私は次の方法を試しました:

$usersArr = User::where('loc_id',session('organization'))
  ->where('status', '!=', 'Deleted')
  ->orderBy('id', 'desc')
  ->lists('username', 'id');

したがって、これらのタイプのメソッドを定義するのに最適な場所を知りたいと思いました。これをModel、Controllerで定義するか、ある種の一般的な関数を作成する必要がありますか?

4

2 に答える 2

0

CommonModel を作成し、そこで関数を定義します..そしてそのモデルを調整します

于 2016-04-28T10:45:46.277 に答える
0

それはよくある質問です。最も一般的なアプローチは、そのための Repository クラスを作成することだと思います (たとえば、UserRepository という名前で)。次のように repo メソッドを定義できます。

class UserRepository{

    public static function getOrganizationActiveUsers($organization){
        return User::where('loc_id', $organization)
              ->where('status', '!=', 'Deleted')
              ->orderBy('id', 'desc')
              ->lists('username', 'id');
    }

}

次に、このメソッドを次のような他のクラスで使用します。

$variable = UserRepository::getOrganizationActiveUsers(session('organization'));

このようにして、クラスはある種のセッションが存在することを知る必要がなくなります。これは、たとえば特定の API にアクセスするときにセッションにアクセスできない場合に役立ちます。

また、次の方法で、コントローラー (または他のクラス) にリポジトリを挿入することもできます。

<?php 


use Namespace/SubnameSpace/UserRepository; // this is very important, to specify the correct full classname with namespace; 


class SomeController
{


    __construct(UserRepository $userRepo) 
    {
        $this->userRepo = $userRepo;
    }

    public  function showUserOrganizationUsers()
    {
        $users = $this->userRepo->getOrganizationActiveUsers(session('organization'));

        return $users;
    }

}

これは、たとえば、まったく異なるクラスを同じメソッドで注入したい場合にも便利です。(依存関係の注入について詳しく知りたい場合は、インターフェースと Laravel DI コンテナーについて読んでください。依存関係を注入する際に非常に便利です。上で示したのは単純な方法です)。

ちなみに、ここでさまざまなアプローチのサンプルコードベースを確認できます: Awesome Laravel on GitHub

于 2016-04-28T11:22:43.810 に答える