J'ai un contrôleur qui passe la saisie d'un formulaire dans une classe de modèle pour effectuer une validation. Si la validation est réussie, je souhaite permettre au flux de continuer et de rendre la visualisation par défaut associée au contrôleur. P>
Mon problème est que si la validation n'a pas de succès, je souhaite que le modèle passe les messages d'erreur de validation de retour et les afficher dans une vue séparée. Comment puis-je définir les messages d'erreur sur la vue alternative? P>
Merci d'avance. P>
4 Réponses :
Pourquoi voulez-vous afficher les messages d'erreur dans une vue différente? Pourquoi ne pas construire de conditionnels dans la vue? Quelque chose comme si le formulaire a des erreurs puis écho les messages d'écho de l'écho. P>
Vous pouvez utiliser $ ceci -> _ transmettre à une autre action avec sa vue respective. Vous pouvez transmettre ce que vous voulez. Il suffit de passer l'objet de formulaire le long, il contient tous les messages d'erreur. Ou vous pouvez récupérer certains messages d'erreur ou tous de l'objet de formulaire et les transmettre à une vue ou à une action. p>
Devrait probablement aller avec la même vue. Dans la méthode de validation, je renvoie un message d'erreur en fonction de l'échec de la validation échoué par E.g. S'il passe, je retourne vide, puis vérifiez la vue si la valeur de retour de la validation n'est pas vide? C'est ce que tu veux dire
Il semble que vous faites une vérification de validation manuellement. Mais c'est ce que les validateurs sont-ils avant, puis il vous suffit d'appeler $ forme-> isvalid () afin de savoir si tous les tests sont passés. Si vous avez besoin de validateurs que ZF ne propose pas, vous pouvez écrire vos propres validateurs personnalisés et les brancher exactement de la même manière que les validateurs intégrés. Vous pouvez donc par exemple vérifier si ($ formulaire-> isvalid ()) puis envoyez les messages d'erreur plus si vous souhaitez utiliser $ former-> peupler et envoyer le formulaire peuplé à la vue ou envoyer un message de réussite.
De plus, vous pouvez toujours faire des chèques dans la vue également. Comme si ($ Form-> HaseRors) Montrez cela, sinon montrez que. (! pseudo-code!)
Frais. Je l'obtiens maintenant. Je vais regarder dans des validateurs personnalisés maintenant.
Eh bien, à partir du contrôleur, vous pouvez les rediriger vers une autre action dans un autre contrôleur:
$this->render('index_alternative');
FlashMessenger pourrait faire partie de la solution? http://framework.zend.com/manual/fr/zend. contrôleur.actionhelpers.html p>
N'utilisez pas _forward () Si vous redirigez vers des actions dans le même contrôleur, appelez simplement l'action directement en utilisant $ ceci-> FOOACTION (), plutôt que ceci -> _ Forwwing ... p>
La raison est la performance et les erreurs pouvant survenir en raison du contrôleur étant construit en wtice. Lorsque vous appelez _forward non seulement le prédispatch exécutoire à nouveau (qui est quelque chose à attendre) mais init () et le constructeur est également appelé à nouveau. Si votre contrôleur est étendu à d'autres contrôleurs, tous ces contrôleurs seront appelés aussi, y compris leur init (). Si vous avez du code dans votre init (), il sera exécuté deux fois, et si vous écrivez dans une base de données, elle écrira la ligne deux fois! Évitez tout le nécessaire et appelez l'action directement et utilisez-le $ ceci-> Rendu () à la place. P>
Vous pouvez facilement voir ce problème si vous proférez votre code, P>