Domanda

Sto utilizzando una funzione difalfind per modificare i dati da una funzione Trova. Funziona bene. Se sposto la funzione di Afterfind in un comportamento (in un plug -in) funziona ancora, ma solo quando il modello di interesse è il modello principale, cioè non viene chiamato quando il modello appartiene a un altro modello. C'è un modo per aggirare questo? Sto usando la torta 1.3.4. Questa è una versione semplificata del comportamento:

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;
    }
}
È stato utile?

Soluzione

Immagino che farei una delle 2 cose a seconda di come si applica genericamente il blocco del codice:

  1. Versione universale: non utilizzare un comportamento, ma includi il blocco del metodo AppModel::afterFind
  2. Versione chirurgica: utilizzare un comportamento e allegarlo a ciascun modello che deve condividere la funzionalità.

Altri suggerimenti

Un comportamento non dovrebbe funzionare su modelli correlati, ad esempio, se hai questi due modelli:

app/modelli/product.php

<?php

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

?>

app/modelli/category.php

<?php 

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

?>

Un po 'di combustione verrà eseguito solo quando si chiama metodi per il prodotto, perché il comportamento non è associato alla categoria

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

Imposta un evento che fa la formattazione: attiva quell'evento come è necessario. Facile come torta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top