Cakephp多态行为错误

Cakephp多态行为错误,cakephp,Cakephp,我正在使用一个反馈插件来添加对我的应用程序中使用多态行为的任何模型的评论。我在我的应用程序上发现2个错误 Strict(2048):PolymorphicBehavior::setup()的声明应与ModelBehavior::setup(Model$Model,$config=Array)兼容[APP\Plugin\Feedback\Model\Behavior\PolymorphicBehavior.php,第93行] Strict(2048):PolymorphicBehavior::af

我正在使用一个反馈插件来添加对我的应用程序中使用多态行为的任何模型的评论。我在我的应用程序上发现2个错误

Strict(2048):PolymorphicBehavior::setup()的声明应与ModelBehavior::setup(Model$Model,$config=Array)兼容[APP\Plugin\Feedback\Model\Behavior\PolymorphicBehavior.php,第93行]

Strict(2048):PolymorphicBehavior::afterFind()的声明应该与ModelBehavior::afterFind(Model$Model$results$primary)兼容[APP\Plugin\Feedback\Model\Behavior\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))));
}
}

只需调整插件文件即可进行建议的更改。参考实现如下所示:

// /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) {
如果仍然有太多错误,可能需要隐藏严格的警告或切换到更好的插件