2009-07-23 5 views
4

L'application sur laquelle je travaille comporte plusieurs champs de base de données appelés «actifs», qui sont des booléens. Cependant, au lieu d'afficher "1" ou "0" dans les vues, je voudrais qu'il dise "Oui" ou "Non".CakePHP Custom Global Function

je la fonction suivante:

function activeFriendlyName($status) 
    { 
     if ($status == 1) 
     { 
      return "Yes"; 
     } 
     else 
     { 
      return "No"; 
     } 
    } 

Cependant, je ne suis pas sûr où je devrais mettre cette fonction globale? Serait-ce le fichier app_model.php? De plus, comment j'appellerais cette fonction pour appliquer le "formatage"?

Répondre

5

Vous devez laisser les données provenant de la base de données telles quelles jusqu'à ce que vous ayez besoin de les afficher. Cela signifie que la vue est le bon endroit pour le changer. Je venais d'aller avec un simple:

echo $model['Model']['bool'] ? "Yes" : "No"; 

Mais si vous avez besoin de règles plus complexes formating que vous ne voulez pas répéter à chaque fois, faire une aide personnalisée.

Vous pouvez définir une fonction globale dans bootstrap.php, mais je ne le recommanderais pas.

+0

Voilà comment je l'ai configuré en ce moment: codé en dur. J'essayais de configurer un moyen, donc si je décidais de dire «Actif»: «Non actif», il serait plus facile de changer globalement ..... – Jefe

+3

Ensuite, la meilleure option est de faire une aide personnalisée. Ou utilisez les fonctions de traduction: '$ x? __ ('Oui'): __ ('Non') ' – deceze

+0

Ou renvoyer un' constant', que vous définissez dans 'bootstrap.php'. – deceze

0

Ce que je personnellement faire est d'ajouter un rappel afterFind aux modèles que vous avec au changement statut.

class MyModel extends Model { 

    ... // the rest of model code 

    function afterFind($results) { 
     foreach ($results as $key => $val) { 
      if (isset($val['MyModel']['status'])) { 
       $results[$key]['MyModel']['status_text'] = $results[$key]['MyModel']['status'] ? 'Yes' : 'No'; 
      } 
     } 
     return $results; 
    } 
} 

De cette façon, vous avez encore tous les champs si forme normale et vous pouvez toujours par exemple mettre à jour et enregistrer votre modèle qui ne fonctionnera pas si vous changez la valeur int récupérée de la base de données en chaîne.

+0

Pas une bonne idée. Non seulement cela prend plus de temps pour faire toutes les requêtes, mais vous gaspillez également vos résultats avec plus de données. Si vous décidez de créer un champ "' status_text' "dans votre modèle, vous avez de gros problèmes. – deceze

+0

Non, vous ne le ferez pas. Comme vous avez pu le remarquer, j'ai ajouté un champ supplémentaire au modèle appelé 'status_text'. Je ne modifie pas la valeur d'origine. – RaYell

+0

Désolé, mal lu, fixé plus tôt commentaire. – deceze