Zend ViewScript Decorator большая картина, общее использование. Как? - PullRequest
1 голос
/ 25 сентября 2010

Это правда, что я видел много примеров по стеку и множество из поиска в Google, но, очевидно, никто не показал общую картину того, как вещи подпадают друг под друга, даже из самого руководства.

Я только что выбрал Zend Framework (1.10.8), и при создании форм я наконец-то обнаружил, что ViewScript на данный момент намного проще для меня, но это не так.

У меня есть module booking, с UserController и createAction в нем. Под /application/modules/booking/views/scripts/user у меня есть create.phtml и custormerForm.phtml.

Насколько я понимаю, в конце всего, что моя форма с ее рендерингом будет показана в моем create.phtml, так как в моей форме будет использоваться customerForm.phtml для ее визуального отображения и вставки в виде создания.

Итак, я пошел дальше и создал простую форму

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);
}

Теперь вот действие create в 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);
    }
  }
}

Теперь это create.phtml и 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>

поэтому, когда я нажимаю на мою страницу, как в http://localhost/project/booking/user/create он просто отображает макет с содержимым представления создания без формы. Ничего в источнике страницы, без ошибок.

Правильно ли я понял, как это использовать, или я просто делаю что-то не так в коде? И, поскольку я использую Zend Framework 1.10.8, похоже, нет никакого учебника, охватывающего все это на ViewScript. декоратор.

Может кто-нибудь помочь мне и поделиться своим ценным опытом здесь? Большое спасибо за чтение этого. Может быть, я сделаю этот урок, кто знает: D

Ответы [ 2 ]

0 голосов
/ 29 сентября 2010

Хорошо, я понял это. Все в коде было правильным.
Мне просто нужно было поместить customerForm.phtml в /modules/booking/views/scripts/, и все. Спасибо всем, кто пытался мне помочь. Теперь я могу научиться настраивать стандартные декораторы, как пытался объяснить Тауфков.

0 голосов
/ 26 сентября 2010

Привет, я бы хотел переписать ваше действие и на время забыть о customerForm.phtml

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);
    }}}

что делают декораторы элементов

Zend_Form_Decorator_FormElements Формы, группы отображения и подформы коллекции элементов. С целью чтобы визуализировать эти элементы, они используют декоратор FormElements, который перебирает все элементы, вызывая render () на каждом и соединяя их с зарегистрированный разделитель. Оно может добавить или добавить содержимое перешел к нему.

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

Надеюсь, я все сделал правильно, к вашему сведению, я еще не проверял действие :)

...