2011-12-09 11 views
7

Zend Frameworkでカスタムフォームを使用する方法に問題があります。Zend Frameworkビュースクリプトを使用したカスタムフォーム

私は様々なガイドに従っていますが、動作するものはありません。何もレンダリングされません。

は、ここで私は(下のすべてのコードは、デフォルトのモジュールである)を使用しようとしているコードのビットです。私はテストのための単一の入力にコードを単純化しました。

アプリケーション/フォーム/ワン/ 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)); 
    } 

} 

アプリケーション/ビュー/スクリプト/ 1/

<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> 

アプリケーション/コントローラ/ 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; 
} 
formlayout.phtml

application/views/scripts/index/formtest.phtml

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

上記のコードは、エラーをスローまたはpタグの間フォームタグやテキストを含むformlayout.phtmlの一部をレンダリングされません。

私が間違っていることを誰に教えてもらえますか?

+0

一般的なエラーは、親のコンストラクタを呼び出すことはありません、あなたのフォームクラスでコンストラクタを持っています。これは最終的に 'init()'メソッドを呼び出す親コンストラクタであるため、フォーム出力が空になります。ちょうど大声を考えて... –

答えて

1

は、ここでは、this articleから適応軌道に乗るには非常に単純な例です。

形式: - でsetDecorators()addElements()setElementDecorators()

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

ためには、ここで非常に重要であると呼ばれています。

ビュースクリプト_form_test.phtmlは、好きなものを呼び出すことができますが、レンダラーが見つけることができるようににある必要があります。あなたは、フォームのインスタンスをビューに渡しといつものようにそれをレンダリング

<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> 

- :

/views/scripts/_form_test.phtmlは、次のようになります。この例の出力は以下のようになります - あなたはあなた自身のフォームの作成を開始取得するのに十分であるべき

<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> 

0

あなたが画面上に何も表示されない場合は通常、それは何らかのエラーが起こったことを意味します。 おそらくエラーが消えていたり、何かがありました。私はあなたにアイデアを伝えようとしています。

私は次のような場所にスポットを当てることができる唯一のものです。 以下のコードでは、要素を印刷するときにフォームを指定する必要があります。 vascowhiteのコードが示すように

<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> 

、あなたがviewscript内にあると、フォームの変数を要素と呼ばれています。viewscriptデコレータは、部分的にレンダリングを行うため、異なる変数名を持つviewscript内に独自のスコープを作成します。

元のビューではビューは$ formでしたが、ビュースクリプトではそれを要素と呼ぶ必要があります。

<?= ?>または<?php ?>タグの代わりに<? ?>タグを使用しました。たぶん、それは解析を超えている何らかのエラーを引き起こし、そのために出力が得られないのです。

+0

ポストに '<'記号を表示するには、<を使用しなければならないことがわかりました。他の誰かが他の方法を知っていますか? –

+0

コードを表示し、バックラインを使用して文字をインラインまたはコメントにエスケープするために4つのスペースでインデントします – vascowhite

4

私は問題があなたのフォーム要素のデコレータだと思う。デコレータをViewHelperとErrorのみに設定する必要があります。それは少なくとも私のために働く。ここで

は、私が使用したコードであり、それは

アプリケーション/フォーム/ 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') 
     )); 
    } 
} 

アプリケーション/ビュー/スクリプト/インデックス/ 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> 

を動作するはずですアプリケーション/ビュー/スクリプト/インデックス/ index.phtml

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

アプリケーション/コントローラ/ IndexController.php

public function indexAction() { 
    $form = new Application_Form_Form(); 
    $this -> view -> form = $form; 
} 
関連する問題