2011-12-09 36 views
7

Tôi đang gặp một số vấn đề về cách sử dụng biểu mẫu tùy chỉnh trong khung công tác Zend.Biểu mẫu tùy chỉnh khung công tác Zend với viewScript

Tôi đã làm theo các hướng dẫn khác nhau nhưng dường như không có cách nào hoạt động. Không có gì ở tất cả được trả lại.

Dưới đây là các bit mã mà tôi đang cố gắng sử dụng (Tất cả mã bên dưới là trong mô-đun mặc định). Tôi đã đơn giản hóa mã cho một đầu vào duy nhất cho thử nghiệm.

ứng dụng/mẫu/Một/Nametest.php

class Application_Form_One_Nametest extends Zend_Form { 

    public function init() { 

     $this->setMethod('post'); 

     $name = new Zend_Form_Element_Text('name'); 
     $name->setLabel('Box Name') 
       ->setRequired(true) 
       ->addFilter('StripTags') 
       ->addFilter('StringTrim') 
       ->addValidator('NotEmpty'); 

     $submit = new Zend_Form_Element_Submit('submit'); 
     $submit->setLabel('Submit Message'); 
     $submit->setAttrib('id', 'submitbutton'); 
     $submit->setAttrib('class', 'bluebutton'); 

     $this->addElements(array($name, $submit)); 
    } 

} 

application/views/scripts/một formlayout.phtml

<form action="<?= $this->escape($this->form->getAction()) ?>" method="<?= $this->escape($this->form->getMethod()) ?>"> 

    <p> 
     Please provide us the following information so we can know more about 
     you. 
    </p> 

    <? echo $this->element->name ?> 
    <? echo $this->element->submit ?> 

</form> 

application// controllers/IndexController.php

public function formtestAction() { 
    $form = new Application_Form_One_Nametest(); 
    $form->setDecorators(array(array('ViewScript', array('viewScript' => 'one/formlayout.phtml')))); 

    $this->view->form = $form; 
} 

ứng dụng/lượt xem/tập lệnh/chỉ mục/formtest.phtml

<h1>Formtest</h1> 
<? 
echo $this->form;  
?> 

Đoạn mã trên không ném bất kỳ lỗi nào hoặc hiển thị bất kỳ phần nào của formlayout.phtml bao gồm thẻ biểu mẫu hoặc văn bản giữa các thẻ p.

Ai có thể cho tôi biết tôi có thể làm gì sai?

+0

Lỗi thường gặp là có hàm tạo trong lớp biểu mẫu không gọi hàm khởi tạo gốc. Điều này dẫn đến kết quả đầu ra dạng trống vì nó là hàm tạo cha mà cuối cùng gọi phương thức 'init()' của bạn. Chỉ cần suy nghĩ to ... –

Trả lời

1

Dưới đây là một ví dụ rất đơn giản để giúp bạn chuyển thể từ this article.

Hình thức: -

class Application_Form_Test extends Zend_Form 
{ 
    public function init() 
    { 
     $this->setMethod('POST'); 
     $this->setAction('/'); 
     $text = new Zend_Form_Element_Text('testText'); 

     $submit = new Zend_Form_Element_Submit('submit'); 

     $this->setDecorators(
       array(
        array('ViewScript', array('viewScript' => '_form_test.phtml')) 
        ) 
       ); 

     $this->addElements(array($text, $submit)); 
     $this->setElementDecorators(array('ViewHelper')); 
    } 
} 

Thứ tự mà setDecorators(), addElements()setElementDecorators() được gọi là rất quan trọng ở đây.

Tập lệnh xem _form_test.phtml có thể được gọi là bất kỳ thứ gì bạn thích, nhưng cần phải ở trong /views/scripts để trình kết xuất có thể tìm thấy nó.

/views/scripts/_form_test.phtml sẽ giống như thế này: -

<form id="contact" action="<?php echo $this->element->getAction(); ?>" 
     method="<?php echo $this->element->getMethod(); ?>"> 

<p> 
Text<br /> 
<?php echo $this->element->testText; ?> 
</p> 

<p> 
<?php echo $this->element->submit ?> 
</p> 

</form> 

Bạn nhanh chóng các hình thức, vượt qua nó để xem và làm cho nó như thường lệ. Kết quả từ ví dụ này trông giống như sau: -

<form id='contact' action='/' method='post'> 
    <p> 
     Text<br /> 
     <input type="text" name="testText" id="testText" value=""></p> 
    <p> 

    <input type="submit" name="submit" id="submit" value="submit"></p> 
</form> 

Điều đó là đủ để bạn bắt đầu tạo biểu mẫu của riêng bạn.

0

Thông thường, nếu bạn không thấy bất cứ điều gì trên màn hình, điều đó có nghĩa là một số lỗi xảy ra. Có thể bạn đã tắt các lỗi hoặc điều gì đó, có thể không. Tôi chỉ đang cố gắng cho bạn ý tưởng.

Điều duy nhất tôi có thể phát hiện ra những điều sau đây. Trong mã bên dưới, bạn vẫn phải chỉ định biểu mẫu khi cố in các phần tử.

<form> 
action="<?php $this->escape($this->element->getAction()) ?>" 
method="<?php $this->escape($this->element->getMethod()) ?>" > 

<p> 
    Please provide us the following information so we can know more about 
    you. 
</p> 

<?php echo $this->element->getElement('name'); ?> 
<?php echo $this->element->getElement('submit') ?> 

</form> 

Như chương trình đang vascowhite của, một khi bạn đang ở trong viewscript, biến với hình thức được gọi là phần tử.Trình trang trí viewscript sử dụng một phần để thực hiện việc dựng hình và do đó nó tạo ra phạm vi của riêng nó trong bản ghi với các tên biến khác nhau.

Vì vậy, mặc dù trong chế độ xem ban đầu của bạn, nó được gọi là $ form, trong dạng xem, bạn sẽ phải gọi nó là phần tử.

Ngoài ra, có thể đã sao chép/dán vội vàng, nhưng bạn đã sử dụng các thẻ <? ?> thay vì thẻ <?= ?> hoặc <?php ?>. Có lẽ điều đó gây ra một số lỗi vượt quá phân tích cú pháp và đó là lý do tại sao bạn không có đầu ra.

+0

Tôi mất một lúc để tìm ra rằng tôi đã phải sử dụng < để nhận được biểu tượng '<' hiển thị trong bài đăng. Có ai khác biết bất kỳ phương pháp nào khác không. –

+0

Chỉ cần thụt lề bằng 4 dấu cách để hiển thị mã và sử dụng backtick để thoát các ký tự nội tuyến hoặc trong nhận xét – vascowhite

4

Tôi nghĩ rằng vấn đề là trang trí của phần tử biểu mẫu của bạn. Bạn chỉ nên đặt trình trang trí cho ViewHelper và Error. Nó làm việc cho tôi ít nhất.

Đây là mã tôi đã sử dụng và nó cũng làm việc

ứng dụng/mẫu/form.php

class Application_Form_Form extends Zend_Form { 

public function loadDefaultDecorators() { 
    $this->setDecorators(
     array(
      array(
       'ViewScript', 
       array(
        'viewScript' => 'index/formlayout.phtml', 
       ) 
      ) 
     ) 
    ); 
} 

    public function init() { 
     $this->setAction('/action'); 
     $this->setMethod('post'); 

     $this->addElement('text', 'name', array(
      'decorators' => array('ViewHelper', 'Errors') 
     )); 
    } 
} 

application/views/scripts/index/formlayout.phtml

<form action="<?php echo $this->element->getAction(); ?>" method="<?php echo $this->element->getMethod(); ?>"> 
    <div> 
    <label for="name">Box Name</label> 
    <?php echo $this->element->name; ?> 
    </div> 

    <input type="submit" value="Submit Message" id="submitbutton" class="bluebutton"> 
</form> 

ứng dụng/lượt xem/tập lệnh/chỉ mục/index.phtml

<!-- application/views/scripts/index/index.phtml --> 
<?php echo $this -> form; ?> 

ứng dụng/bộ điều khiển/chỉ mụcController.php

public function indexAction() { 
    $form = new Application_Form_Form(); 
    $this -> view -> form = $form; 
} 
Các vấn đề liên quan