2013-03-04 111 views
0

我使用的反馈,从这个link插件在使用PolymorphicBehavior我的应用程序上的任何模型添加注释。我的应用上出现了两个错误,说CakePHP的PolymorphicBehavior错误

严格(2048):PolymorphicBehavior声明:: setup()应该与ModelBehavior :: setup(Model $ model,$ config = Array)兼容[APP \ Plugin \反馈\ Model \ Behavior \ PolymorphicBehavior.php,line 93]

严格(2048):PolymorphicBehavior声明:: afterFind()应该与ModelBehavior :: afterFind兼容(Model $ model,$ results,$ primary)[ APP \插件\反馈\型号\性能\ PolymorphicBehavior.php,行93]

不用知道是什么原因导致这些错误。如果有人能帮助我,那会很棒。这是我的PolymorphicBehavior.php的代码。请也不行93中的代码

<?php 

App::uses('ModelBehavior', 'Model'); 

//PolymorphicBehavior class 

class PolymorphicBehavior extends ModelBehavior { 

//defaultSettings property 

protected $_defaultSettings = array(
'modelField' => 'model', 
'foreignKey' => 'foreign_key' 
); 

// setup method 

public function setup($Model, $settings = array()) { 
if (!isset($this->settings[$Model->alias])) { 
$this->settings[$Model->alias] = $this->_defaultSettings; 
} 
$this->settings[$Model->alias] = array_merge($this->settings[$Model->alias], (array) $settings); 
} 

//afterFind method 

public function afterFind($Model, $results, $primary = false) { 
extract($this->settings[$Model->alias]); 
if (App::import('Vendor', 'MiCache')) { 
$models = MiCache::mi('models'); 
} else { 
$models = App::objects('Model'); 
} 
if ($primary && isset($results[0][$Model->alias][$modelField]) && isset($results[0][$Model->alias][$foreignKey]) && $Model->recursive > 0) { 
foreach ($results as $key => $result) { 
$associated = array(); 
$model = Inflector::classify($result[$Model->alias][$modelField]); 
$foreignId = $result[$Model->alias][$foreignKey]; 
if ($model && $foreignId && in_array($model, $models)) { 
$result = $result[$Model->alias]; 
if (!isset($Model->$model)) { 
$Model->bindModel(array('belongsTo' => array(
$model => array(
'conditions' => array($Model->alias . '.' . $modelField => $model), 
'foreignKey' => $foreignKey 
) 
))); 
} 
$conditions = array($model . '.' . $Model->$model->primaryKey => $result[$foreignKey]); 
$recursive = -1; 
$associated = $Model->$model->find('first', compact('conditions', 'recursive')); 
$name = $Model->$model->display($result[$foreignKey]); 
$associated[$model]['display_field'] = $name?$name:'*missing*'; 
$results[$key][$model] = $associated[$model]; 
} 
} 
} elseif(isset($results[$Model->alias][$modelField])) { 
$associated = array(); 
$model = Inflector::classify($result[$Model->alias][$modelField]); 
$foreignId = $results[$Model->alias][$foreignKey]; 
if ($model && $foreignId) { 
$result = $results[$Model->alias]; 
if (!isset($Model->$model)) { 
$Model->bindModel(array('belongsTo' => array(
$model => array(
'conditions' => array($Model->alias . '.' . $modelField => $model), 
'foreignKey' => $foreignKey 
) 
))); 
} 
$conditions = array($model . '.' . $Model->$model->primaryKey => $result[$foreignKey]); 
$recursive = -1; 
$associated = $Model->$model->find('first', compact('conditions', 'recursive')); 
$name = $Model->$model->display($result[$foreignKey]); 
$associated[$model]['display_field'] = $name?$name:'*missing*'; 
$results[$model] = $associated[$model]; 
} 
} 
return $results; 
} 

//display method 

public function display($Model, $id = null) { 
if (!$id) { 
if (!$Model->id) { 
return false; 
} 
$id = $Model->id; 
} 
return current($Model->find('list', array('conditions' => array($Model->alias . '.' . $Model->primaryKey => $id)))); 
} 
} 

回答

0

最后一行仅仅调整了插件文件,使建议的更改。参考实现是这样的:

// /lib/Cake/Model/ModelBehavior.php 
public function setup(Model $model, $config = array()) { 
public function afterFind(Model $model, $results, $primary) { 

...所以你需要改变这一点:

public function setup($Model, $settings = array()) { 
public function afterFind($Model, $results, $primary = false) { 

...这个:

public function setup(Model $Model, $settings = array()) { 
public function afterFind(Model $Model, $results, $primary) { 

如果你仍然得到了太多的错误,您可能需要隐藏严格的警告或切换到更好的插件。

+0

感谢它的工作。 – 2013-03-04 09:47:56