Je travaille sur PHP et Zend. Je dois montrer différents types de messages d'erreur / de confirmation dans l'application. La plupart de ces messages sont placés dans le code. Donc, si je dois changer un message, je dois le modifier partout où ce type de message particulier est codé.
Quelle est la meilleure façon de stocker tous les messages sur place et de les utiliser à travers l'application. p>
stocke tous les messages dans la base de données. (nous devons déplacer ces messages vers un autre type de base de données. Par exemple, si nous passons de MySQL sur SQL Server.) EM> P> L> LI>
Stockez tous les messages de la classe PHP séparée à l'aide de la matrice et obtenez ces messages à l'aide de méthodes de classe (problème: nous ne pouvons pas utiliser cette classe dans d'autres langages de programmation.) EM> P> li>
Message de stocker dans un format spécial qui acceptable pour toutes les langues, par exemple, Type d'ini de fichiers. P> LI>
ul> Parfois, nous devons changer de message pour un enregistrement particulier. Par exemple: p> Quelle sera la meilleure méthode pour gérer ce cas? p> merci p> p>
6 Réponses :
Vous pouvez avoir une sorte de classe statique dans le dossier de la bibliothèque. Qui contiendrait un ensemble de variables constantes telles que
Messages::showMessage(Messages::PRODUCT_SAVED_OK);
Je pense que vous pouvez adopter une approche plus simple que ce que suggéra Ozair. J'ai changé le code dans ma réponse pour vous montrer comment. Fondamentalement, les variables constantes auraient des espaces réservés pour les informations dynamiques. Passer simple les données du format de tableau comme indiqué dans le code. La boucle de Foreach veillera à mettre les données que vous avez transmises dans le message.
La première chose que vous devez aller regarder est ce que votre problème est. P>
Pour vous, il semble que la maintenance du code. Ce que j'ai trouvé pour travailler, c'est stocker tous ces messages en tant que classe distincte, par exemple appelé Chaque type de notification que vous appelleriez peut être stocké comme méthode afin que vous appelez le notificateur, il recevrait un message des membres de la classe qui peuvent facilement être modifiés en fonction de vos besoins. P>
stocker ces messages dans une base de données n'est pas une mauvaise façon de le faire, mais pas la solution réelle à votre besoin à ce stade. Cela signifie avoir à maintenir une autre table ajoutant des requêtes supplémentaires à votre code qui doivent être échappés correctement ,c. en bref, plus de maintenance au lieu de moins. P>
J'irais pour la classe dans laquelle vous pouvez stocker ces messages en tant que constantes de classe. P>
En outre, les membres de cette classe peuvent très facilement être traduits afin que ce soit votre meilleure option. P> notifications code> (juste un exemple) P>
Si vous souhaitez afficher uniquement des messages statiques, La réponse non autorisée d'Elgabbu suffira.
Toutefois, si vous souhaitez afficher des messages comme: p>
Le produit Nom du produit em> a été enregistré avec succès. P> BlockQuote>
Vous aurez besoin de plus que cela. Dans ce cas, vous devriez définir un message
message code> comme suit: p>
xxx pré> puis pour le message enregistré par produit, vous avez besoin d'une sous-classe P>
class ProductSaved extends Message { private $productName_ = ""; __contruct($productName) { $this->productName_ = $productName; } public getMessage() { return "The product $productName_ has been saved successfully."; } }
Que diriez-vous de le stocker dans une langue de codage non directe, puis utilisez une macro pour la transformer en une matrice ou une classe statique ou quoi que ce soit? Il peut être dans la base de données, XML ou tout ce que vous voulez. Vous n'auriez besoin que de 2 champs pour un message d'erreur: le nom du message et le contenu.
Par exemple, dans XML, vous pourriez faire cela: P>
// In both cases, day would be 3rd parameter to printf, month the second and year the first $spanish = 'Hoy es %3$d/%2$d/%1$d'; $english = 'Today is %2$d/%3$d/%1$d';
Le meilleur moyen d'utiliser zend_translate (même si vous n'avez pas la version multilingue de votre site Web) + .ini, peut être accepté par d'autres applications / langues et vous pouvez la lire directement dans Traducteur ou via zend_config_ini. . Vous pouvez utiliser un fichier XML de la même manière. Énorme Pro est que vous pouvez facilement connecter Zend_Translator avec Zend_Form et avoir également traduit des étiquettes et des erreurs de validation. P>
"J'ai utilisé le traducteur de Zend Framework pour stocker les chaînes de messages de validation de formulaire dans les fichiers INI:
module.php p> puis dans ./module/mymodule/language/ EN_UK.INI P> $inputFilter->add( array(
'name' => 'hasTagApproval',
'required' => true,
'validators' => array(
array(
'name' => 'Callback',
'options' => array(
'messages' => array(
\Zend\Validator\Callback::INVALID_VALUE => 'tag_approved_but_no_id',
),
.....
),
),