Frage

Ich verwende eine AfterFind -Funktion, um Daten aus einer Find -Funktion zu ändern. Es funktioniert gut. Wenn ich die Afterfind -Funktion in ein Verhalten (in einem Plugin) bewege, funktioniert es immer noch, aber nur, wenn das Interessensmodell das primäre Modell ist, dh es wird nicht aufgerufen, wenn das Modell ein anderes Modell gehört. Gibt es eine Möglichkeit, das zu rund um das? Ich benutze Cake 1.3.4. Dies ist eine vereinfachte Version des Verhaltens:

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;
    }
}
War es hilfreich?

Lösung

Ich denke, ich würde eines von 2 Dingen tun, je nachdem, wie allgemein der Codeblock gilt:

  1. Universelle Version: Verwenden Sie kein Verhalten, sondern geben Sie Ihren Methodenblock in ein AppModel::afterFind
  2. Chirurgische Version: Verwenden Sie ein Verhalten und befestigen Sie es jedem Modell, das die Funktionalität teilen muss.

Andere Tipps

Ein Verhalten soll nicht an verwandten Modellen arbeiten, zum Beispiel, wenn Sie diese beiden Modelle haben:

App/models/product.php

<?php

class Product extends AppModel{
    var $belongsTo = array('Category');
    var $actsAs = array('SomeBehavior');
}

?>

App/models/category.php

<?php 

class Category extends AppModel {
    var $hasMany = array('Product');
}

?>

Ein bisschen veravior wird nur beim Aufrufen von Methoden für Produkte ausgeführt, da das Verhalten nicht mit der Kategorie verbunden ist

http://github.com/m3nt0r/eventful-cakephp

Richten Sie ein Ereignis ein, das die Formatierung ausführt - auslösen Sie dieses Ereignis, wie Sie es brauchen. Einfach wie Kuchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top