Я использую функцию afterFind для изменения данных из функции поиска. Он работает нормально. Если я переместил функцию afterFind в поведение (в плагине), она все еще работает, но только тогда, когда интересующая модель является основной моделью, т. Е. Не вызывается, когда модель принадлежит другой модели. Есть ли способ обойти это? Я использую торт 1.3.4. Это упрощенная версия поведения:поведение cakephp afterFind не вызвано связанными моделями
class ChemicalStructureBehavior extends ModelBehavior {
function afterFind(&$model, $results, $primary) {
foreach ($results as &$unit) {
// format chemical formula (with subscripts)
$unit[$model->alias]['chemical_formula_formatted'] = preg_replace('/([0-9]+)/i', '<sub>$1</sub>', $unit[$model->alias]['chemical_formula']);
}
return $results;
}
}
Из PHP 5.4 и выше вы можете использовать Trait для этого - просто поместите свой код 'afterFind() в новый файл, содержащий декларацию признака (сменив ссылки' $ model' на '$ this') и включите его в верхней части вашего класса модели с помощью инструкции 'use'. Вам нужно будет использовать 'App :: import()' или 'require()' для загрузки файла, содержащего вашу черту, в верхней части файла модели. – BeesonBison