سلوك CakePhP بعد الوفاة لم يتم استدعاء النماذج ذات الصلة
-
26-09-2019 - |
سؤال
أنا أستخدم دالة Afterfind لتعديل البيانات من دالة البحث. أنه يعمل بشكل جيد. إذا قمت بنقل وظيفة Afterfind إلى سلوك (في البرنامج المساعد) ، فلا يزال يعمل ، ولكن فقط عندما يكون نموذج الاهتمام هو النموذج الأساسي ، أي أنه لا يسمى عندما ينتمي النموذج نموذج آخر. هل هناك أي طريقة جولة هذا؟ أنا أستخدم الكعكة 1.3.4. هذه نسخة مبسطة من السلوك:
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;
}
}
المحلول
أعتقد أنني سأقوم بأحد أمرين اعتمادًا على كيفية تطبيق كتلة التعليمات البرمجية بشكل عام:
- الإصدار العالمي: لا تستخدم سلوكًا ، ولكن قم بتضمين كتلة الطريقة في
AppModel::afterFind
- الإصدار الجراحي: استخدم سلوكًا وأرفقه بكل نموذج يحتاج إلى مشاركة الوظيفة.
نصائح أخرى
لا يُفترض أن يعمل السلوك على النماذج ذات الصلة ، على سبيل المثال ، إذا كان لديك هذين النموذجين:
التطبيق/النماذج/المنتج
<?php
class Product extends AppModel{
var $belongsTo = array('Category');
var $actsAs = array('SomeBehavior');
}
?>
التطبيق/النماذج/الفئة
<?php
class Category extends AppModel {
var $hasMany = array('Product');
}
?>
بعض السلوك لن يتم تنفيذها إلا عند استدعاء أساليب المنتج ، لأن السلوك لا يرتبط بالفئة
http://github.com/m3nt0r/eventful-cakephp
قم بإعداد حدث يقوم بالتنسيق - قم بإعداد هذا الحدث ، كما تحتاج إلى ذلك. سهل مثل الكعكة.