検索

ホームページ  >  に質問  >  本文

thinkphpコードの再利用の問題

開発には ThinkPhp3.2 を使用してください。コードの再利用を高めるために、追加、削除、変更、検索操作を使用する必要があることが多いためです。コードの追加、削除、変更、クエリを行うために、curdControlerとcurdModelを共通に記述しましたが、追加、削除、変更、クエリを使用する必要がある場合は、curdControllerとcurdModelを直接継承します。

ここで問題が発生しました。通常、カードの操作には許可判定が必要であり、そうでないと非常に危険です。ここでの私のアイデアは、curdController 構築メソッドで checkAuth() を呼び出すことです。さまざまな関数があるため、権限制御メソッドは異なります。curdController を継承するサブクラスに checkAuth メソッドをオーバーロードさせるにはどうすればよいですか?

私のアイデアは、許可判定関数を抽象メソッドとして定義することです。 リーリー

curdController クラスは抽象クラスとして定義されていますが、抽象クラスをインスタンス化できない場合、コンストラクターのコードは無効になります。この実装の何が問題ですか?

2 番目の質問です。TP コードを再利用する際に、より良いアイデアはありますか? 私のアプローチの隠れた危険性や問題点は何ですか? アドバイスありがとうございます。

リーリー

代言代言2733日前1078

全員に返信(1)返信します

  • typecho

    typecho2017-07-01 09:13:50

    コードを再利用するには、PHP 機能を使用することをお勧めします:
    http://php.net/manual/zh/lang...
    またはクロージャ バインディングを使用します (推奨されません):
    http://php.net /manual/en /閉じる...

    checkAuth可以通过不同的业务,书写不同的traits,在具体继承curdController的类中使用对应的traits,由于checkAuth()只返回校验结果的真假,所以这个可以向任意的Controller中定制checkAuth()

    最初の質問への答えとして、抽象クラスを継承しているため、サブクラスがインスタンス化されている限り、親クラスのコンストラクターも使用できます。以下の例を参照してください: curdController的子类构造函数里,手动调用了parent::__construct();コード:
    。 リーリー

    結果:


    2 番目の質問に対する答えとして、私は個人的には、一般的な 1 対多および多対多の関係はまだ手動で行う必要がある構造フレームワーク全体だと感じています。この関連付け操作をカプセル化することをお勧めします。

    私が個人的によく使っているフレームワークは

    で作られた再利用パッケージです: CodeIgniter,但是我觉得MVC(HMVC)模型基本思路都是一致的,所以下面谈下我个人在CodeIgniter

    私は個人的にデータテーブルのアトミック操作を最下層に配置しました

    いくつかの設定項目といくつかの書き換えに頼ることで、ソースコードの一部を以下に公開することができます。 リーリー Model上面(是基于CI-Base-Model改的,你可以看一下CI-Base-Model里的has_manybelongs_to配置),另外我继承了CI-Base-Model自己写了一个CRUD_Model,这个CRUD_Model私のモデルのアイデアが CRUD ロジックの改良に役立つことを願っています。

    返事
    0
  • キャンセル返事