1

Cakephp 3 のドキュメントを読み始めたところです (しばらく Cake 2.x で開発してきました) いくつかの Web サイトを 2.x から 3 に移行したいと考えていますAppModel。データベース内のほぼすべてのテーブルに関するロジック。beforeFindbeforeSave

ケーキ3にはありませんがAppModel、どうすれば同じことを行うことができますか? 私が考えることができる最善の方法は、そのコードをいくつかのビヘイビアーのコールバックに入れることですが、30 個のモデルがあり、すべてのモデルでビヘイビアーを 1 つずつロードする必要がありますか?

ありがとう

4

2 に答える 2

4

src/Model/Table フォルダーに AppTable を作成することもできます。

namespace App\Model\Table;

use Cake\ORM\Table;

class AppTable extends Table
{
    public function initialize(array $config)
    {
        parent::initialize($config);

        $this->addBehavior('myBehavior');
        $this->addBehavior('myBehavior2');
        $this->addBehavior('myBehavior3');
    }
}

次に、 Table クラスをAppTableで拡張します。

namespace App\Model\Table;

use App\Model\Table\AppTable;

class ArticlesTable extends AppTable
{

}
于 2016-11-16T13:49:51.187 に答える
2

Model.beforeSaveeventsをリッスンするイベントリスナーを使用し、Model.beforeFindそこでModel.initializeやりたいことを何でも適用します。イベントに関する章テーブル コールバックのドキュメントを読んでください。

use Cake\Event\EventListenerInterface;
use Cake\Event\Event;

class SomeListener implements EventListenerInterface
{

    public function implementedEvents()
    {
        return [
            'Model.beforeFind' => 'beforeFind',
        ];
    }

    public function beforeFind(Event $event, Query $query, ArrayObject $options, boolean $primary)
    {
        // Your code here
    }
}

そして、それをグローバルイベント マネージャーに接続します。これで、すべてのテーブル オブジェクトのコールバックをリッスンします。

于 2015-10-19T21:20:34.070 に答える