1

ケーキのモデルを焼くのに問題があります。プラグインの一部としてモデルを焼き付けています。PluginAppModel クラスにすべてのロジックを含めることで、モデルをドライに保ちます。これにより、アプリケーションの変更に基づいてスキーマを定期的に変更できます。

ただし、モデルを再ベイクするたびに、私が持っている関連付けで、className が正しくありません。たとえば、デフォルトの bake コマンドは次のように出力します。

    public $hasMany = array(
    'Item' => array(
        'className' => 'Item',

いつあるべきか

    public $hasMany = array(
    'Item' => array(
        'className' => 'PluginName.Item',

すなわち。プラグイン名のプレフィックスが付きます。これは、プラグインを移植できるようにするためです。これを先頭に追加するために、bake コマンドに送信する必要があるフラグはありますか? ドキュメントには何も表示されません。これは私が現在使用しているコマンドです

cake bake model PluginName.Item -c myconn -p PluginName

どんな助けでも大歓迎です!

アップデート -

わかりました、これは厄介なハックですが、今は十分です。PluginAppModel のコンストラクター クラスを次のように上書きしました。

public function __construct(){
    parent::__construct(); 
    $this->append_plugin_name_to_classes();     
}

public function append_plugin_name_to_classes(){
    $associations = array('hasMany', 'belongsTo', 'hasOne', 'hasAndBelongsToMany');
    foreach($associations as &$a):
        if(!empty($this->{$a})):
            foreach($this->{$a} as &$b):
                if(isset($b['className'])):
                    $old = $b['className']; 
                    $b['className'] = PLUGIN_NAME . "." . $old;
                endif;
            endforeach;
        endif;
    endforeach;     
}

上記の PLUGIN_NAME は、bootstrap.php で定数として設定されています。これはMVCのやり方ではないと確信していますが、今のところ穴から抜け出します。お役に立てば幸いです。

4

0 に答える 0