2013-03-04 5 views
0

J'utilise un plugin de commentaires à partir de ce link pour ajouter des commentaires sur n'importe quel modèle dans mon application en utilisant le PolymorphicBehavior. Je suis geeting 2 erreurs sur mon application qui ditCakephp erreurs Polymorphic Behavior

Strict (2048): Déclaration de PolymorphicBehavior :: setup() doit être compatible avec ModelBehavior :: setup (Model $ model, $ config = Array) [APP \ Plugin \ Feedback \ Model \ Behavior \ PolymorphicBehavior.php, ligne 93]

Strict (2048): La déclaration de PolymorphicBehavior :: afterFind() doit être compatible avec ModelBehavior :: afterFind (Model $ model, $ results, $ primary) [ APP \ Plugin \ Commentaires \ Modèle \ Comportement \ PolymorphicBehavior.php, ligne 93]

Vous ne savez pas exactement ce qui cause ces erreurs. Si quelqu'un pouvait m'aider, ce serait génial. Voici le code de mon PolymorphicBehavior.php. S'il vous plaît pas de ligne 93 est la dernière ligne dans le code

<?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)))); 
} 
} 

Répondre

0

tweak juste les fichiers de plug-in pour effectuer les modifications proposées. Les implémentations de référence est la suivante:

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

... donc vous devez changer ceci:

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

... dans ce:

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

Si vous obtenez encore trop d'erreurs , vous devrez peut-être masquer des avertissements stricts ou passer à un meilleur plug-in.

+0

Merci cela a fonctionné. –