我遇到烘烤蛋糕模型的问题。我正在将模型作为插件的一部分进行烘焙。我通过在PluginAppModel类中使用所有逻辑来保持模型干燥。这允许我根据应用程序的更改定期更改架构。
但是,无论何时我重新烘焙模型,在我拥有的任何关联中,className都是不正确的。例如,默认的bake命令将其输出为
public $hasMany = array(
'Item' => array(
'className' => 'Item',
什么时候应该
public $hasMany = array(
'Item' => array(
'className' => 'PluginName.Item',
即。以插件名称为前缀。这是为了确保我可以移植我的插件。是否有一个我需要发送到bake命令的标志,以便将其添加到前面?我在文档中看不到任何内容。这是Im目前使用的命令
cake bake model PluginName.Item -c myconn -p PluginName
任何帮助都非常感谢!
UPDATE -
好的,这是一个讨厌的黑客,但它现在已经足够了。我在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的做法,但它现在让我脱离了一个洞。我希望它有所帮助。