2010-09-25 4 views
1

Il est vrai que j'ai vu beaucoup d'exemples sur stackoverflow et beaucoup de recherches sur Google mais apparemment personne n'a montré la grande image de la façon dont les choses se rencontrent les unes les autres, même à partir du manuel lui-même.Zend ViewScript Decorator la grande image, utilisation globale.how to?

Je viens de choisir Zend Framework (1.10.8) et lors de la création de formulaires j'ai finalement trouvé que le ViewScript pour l'instant est beaucoup plus facile à configurer pour moi mais ce n'était pas le cas.

j'ai un module booking, avec UserController et createAction dans it.Under /application/modules/booking/views/scripts/user je create.phtml et custormerForm.phtml. D'après ma compréhension, à la fin de tout mon formulaire avec son rendu sera montré dans mon create.phtml comme dans mon formulaire utilisera le customerForm.phtml pour son visuel et injecté dans la vue de création.

Alors je suis allé de l'avant et a créé une forme simple

function init(){ 
    $this->setMethod("post"); 

    $name = New Zend_Form_Element_Text("name"); 
    $name->setLabel("Name: ") 
    ->setOptions(array("size"=>"35")) 
    ->setRequired(true) 
    ->addValidator("NotEmpty", true); 

    $surname = New Zend_Form_Element_Text("surname"); 
    $surname->setLabel("Surname: ") 
    ->setOptions(array("size"=>"35")) 
    ->setRequired(true) 
    ->addValidator("Alpha", true); 

    $this->addElement($name) 
    ->addElement($surname) 
    ->addElement($submit); 
} 

Maintenant, voici le CréeAction dans UserController

public function createAction(){ 
    $this->view->show = "Please Enter your Details"; 

    $form = new Hotel_Form_Entity(); 
    $form->setAction("/booking/user/create"); 
       //and here set the for to be displayed at described in customerForm view 
    $form->setDecorators(array(array('ViewScript',array('viewScript'=>'customerForm.phtml')))); 
       //so here i set the form to form variable accessible in create view 
    $this->view->form = $form; 
    if($this->getRequest()->isPost()){ 
    if($form->isValid($this->getRequest()->getPost())){ 
     $values = $form->getValues(); 
     $this->_helper->flashMessenger("Thank you.Form processed"); 

     $this->_forward("success","user","booking",$values); 
    } 
    } 
} 

Maintenant, ce sont les create.phtml et customerForm.phtml

<!-- create.phtml --> 
<h4><?php echo $this->show; ?></h4><br/><!-- --> 
<p><?php echo $this->form; ?></p><br/> 

<!-- customerForm.phtml --> 
<div style="padding: 10 0 0 15; border: solid 1.5px #999"> 
<form action="<?php echo $this->element->getAction(); ?>" method="<?php echo $this->element->getMethod(); ?>"> 
    <table> 
    <tr> 
     <td><?php echo $this->element->name; ?></td> 
     <td></td> 
    </tr> 
    <tr> 
     <td></td> 
     <td><?php echo $this->element->surname; ?></td> 
    </tr> 
    <tr> 
     <td colspan="2"><?php echo $this->element->submit; ?> </td> 
    </tr> 
    </table> 
    </form> 
</div> 

donc quand je frappe ma page comme dans http://localhost/project/booking/user/create il affiche simplement la mise en page avec le contenu de la vue de création sans formulaire. Rien dans la source de la page, pas d'erreurs. Est-ce que je me suis trompé sur la façon de l'utiliser ou que je fais juste quelque chose de mal dans le code? Et comme j'utilise Zend framework 1.10.8 il ne semble pas y avoir de tutoriel couvrant tout ça Décorateur ViewScript.

Quelqu'un peut-il me donner un coup de main et partager sa précieuse expérience ici? Merci beaucoup d'avoir lu ceci. Peut-être que je vais faire ce tutoriel qui sait: D

+0

premier conseil sur le décorateur lorsque vous apprenez le décorateur est l'utilisation $ this-> form-> clearDecorators(); pour commencer avec aucun décorateur et de voir comment vos formulaires résultant – tawfekov

+0

je l'ai fait et toujours vérifier la source de la page.Je viens d'avoir besoin d'un simple décorateur de scripts fonctionne pour commencer la personnalisation et obtenir pleinement la compréhension globale.Je suis malheureusement pas trop de temps pour vraiment jouer avec elle. Merci pour votre conseil si. –

Répondre

0

OK j'ai pensé qu'il out.Everything à côté de codage était correct.
Je viens de mettre le customerForm.phtml en /modules/booking/views/scripts/ et c'est tout.Merci pour ceux qui ont essayé de m'aider.Je peux maintenant apprendre à personnaliser les décorateurs standard comme Tawfekov a essayé d'expliquer.

0

Salut je voudrais réécrire votre action et permet d'oublier customerForm.phtml pendant un certain temps

public function createAction(){ 
    $this->view->show = "Please Enter your Details"; 

    $form = new Hotel_Form_Entity(); 
    $form->setAction("/booking/user/create"); 
    $form->setElementDecorators(array('viewHelper', 'formElements'))); 
    $this->view->form = $form; 
    if($this->getRequest()->isPost()){ 
    if($form->isValid($this->getRequest()->getPost())){ 
     $values = $form->getValues(); 
     $this->_helper->flashMessenger("Thank you.Form processed"); 

     $this->_forward("success","user","booking",$values); 
    }}} 

ce que les décorateurs FormElements font

Zend_Form_Decorator_FormElements Les formulaires, groupes d'affichage et sous-formulaires sont des collections d'éléments. Dans l'ordre pour rendre ces éléments, ils utilisent le décorateur FormElements, qui itère à travers tous les éléments, appelant render() sur chacun et les rejoignant avec le séparateur enregistré. Il peut soit ajouter ou ajouter le contenu qui lui est passé.

http://framework.zend.com/manual/en/zend.form.standardDecorators.html

J'espère que je l'ai fait droit, FYI je n'ai pas tester l'action encore :)

+0

merci pour l'effort d'expliquer comment je pourrais utiliser les décorateurs standard.je vais le regarder mais vraiment ce dont j'ai besoin maintenant est de comprendre si je suis sur le bon chemin avec viewscript qui me semble beaucoup plus simple.Peut-être s'il vous plaît regarde et dis-moi ce que je fais mal.J'ai juste besoin de quelque chose pour y aller. Je vous remercie ;) –

Questions connexes