ケーキのモデルを焼くのに問題があります。プラグインの一部としてモデルを焼き付けています。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のやり方ではないと確信していますが、今のところ穴から抜け出します。お役に立てば幸いです。