Question

J'ai un bouton de connexion dans l'en-tête du site. Le code HTML de cet en-tête est programmé dans les vues / layouts / home.phtml du framework Zend.

J'ai dans cette présentation un formulaire masqué qui est déclenché par l'intégration de l'affichage de contenu en ligne jQuery thickbox. Raison, je ne veux pas faire un appel ajax juste pour aller chercher un petit formulaire de connexion.

Je crée le formulaire en utilisant Zend_Form et le problème est que je dois le faire dans tous les contrôleurs après avoir vérifié si l'utilisateur est connecté ou non. Je veux placer cette génération de formulaire dans un seul endroit, disons dans bootstrap et ensuite avoir une logique dans bootstrap pour dire que si l'utilisateur est connecté, ne génère pas le formulaire.

Je ne sais pas si le bootstrap est le bon endroit pour le faire ou si je devrais le faire ailleurs.

Alors, où devrais-je instancier le formulaire pour qu'il soit disponible partout si l'utilisateur n'est pas connecté?

Était-ce utile?

La solution 3

Je l'ai fait d'une manière différente, en élargissant Zend_Controller_Plugin_Abstract pour implémenter un plugin et l'enregistrer avec le contrôleur frontal.

public function routeStartup(Zend_Controller_Request_Abstract $request) { } 

a généré le formulaire dans la méthode mentionnée ci-dessus et en définissant le formulaire dans l'objet $ view.

La vue $ peut être récupérée avec:

$view = Zend_Layout :: getMvcInstance()->getView();

Autres conseils

Créez votre propre contrôleur de base qui étend Zend_Controller_Action puis laissez vos contrôleurs s’étendre hors de votre contrôleur de base. Je ne sais pas ce que & "; Intégration d'affichage de contenu en ligne jQuery thickbox &"; is ... mais vous avez plusieurs sections que vous pouvez insérer en fonction du moment où vous avez besoin de votre code. init (), preDispatch (), postDispatch () etc ... Assurez-vous simplement que lorsque vous étendez votre contrôleur de base, vous effectuez un sthing comme:

parent :: init () parent :: preDispatch () parent :: postDispatch () etc ... dans chaque section pour que le code de base soit également exécuté ...

Faites attention à la solution de Pradeep Sharma (la réponse qu'il a elle-même écrite et acceptée ci-dessous).

Tout le code ci-dessous concerne ZF 1.12 et non ZF 2.0

Au démarrage, l'instance MVC de Zend_Layout n'a peut-être pas encore été créée. Vous devez utiliser Zend_Layout::startMvc() à la place:

$view = Zend_Layout::startMvc()->getView() ;

Et tbh je préfère exécuter ce code dans la fonction preDispatch (). Les nouveaux utilisateurs de ZF pourraient être intéressés par ceci:

application / plugins / HeaderForm.php:

class Application_Plugin_HeaderForm extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {    
        $view = Zend_Layout::startMvc()->getView() ;
        $view->headerForm = new Application_Form_HeaderForm() ;
    }
}

L’appel à une nouvelle Application_Form_HeaderForm() charge automatiquement par défaut le dossier application / forms / . Vous pouvez également créer le formulaire directement dans le plug-in avec new Zend_Form(), et addElement() etc., mais il ne sera pas réutilisable.

Bien sûr, vous devez enregistrer ce plugin dans votre bootstrap!

application / Bootstrap.php:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initPlugin()
    {
        $front = Zend_Controller_Front::getInstance() ;
        $front->registerPlugin(new Application_Plugin_HeaderForm()) ;
    }
}

L'appel de nouveaux Application_Plugin_HeaderForm() sera automatiquement chargé par défaut dans le dossier application / plugins /

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top