2012-02-24 11 views
2

私はZend_Formを使用してログインフォームをレンダリングしようとしていますが、www.site.com/loginまたはwww.site.com/account/loginを呼び出してレンダリングしたいのですが、いったん完了したら下のすべての手順と私は私のブラウザから/ loginまたは/ account/loginを呼び出そうとしています。私はHTTP 500(内部サーバーエラー)を取得しています。 (1)ZFレンダリングできませんZend_Form

zf create model FormLogin

(2)の編集を通じてモデルを作成します

(私はZend Frameworkの1.11を使っていることに注意してください)私が間違っているところ私は..

を見つけ出す助けてくださいアプリケーション/モデル/ FormLogin.php

class Application_Model_FormLogin extends Zend_Form 
{ 
    public function __construct($options = null) 
    { 

     parent::__construct($options); 

     $this->setName('login'); 
     $this->setMethod('post'); // GET O POST 

     $this->setAction('/account/login'); // form action=[..] 

     $email = new Zend_Form_Element_Text('email'); 
     $email->setAttrib('size', 35); 

     $pswd = new Zend_Form_Element_Password('pswd'); 
     $pswd->setAttrib('size', 35); 

     $submit = new Zend_Form_Element_Submit('submit'); // submit button 

     $this->setDecorators(array(array('ViewScript', array('viewScript' => '_form_login.phtml')))); 
     $this->addElements(array($email, $pswd, $submit)); 

     } 

} 

の新しい作成したモデルは、(3)口座コントローラ

にLoginActionのを追加します。
class AccountController extends Zend_Controller_Action 
{ 

    public function init() 
    { 
     /* Initialize action controller here */ 
    } 

    public function indexAction() 
    { 

    } 

    public function loginAction() 
    { 
     $form = new Application_Model_FormLogin(); 

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

    } 


} 

(4)(5)setDecorators(によって呼び出されたページのアプリケーション/ビュー/スクリプト/ _form_login.phtmlを作成

<?php echo $this->form; ?> 

アプリケーション/ビュー/スクリプト/アカウント/ login.phtmlでビューを作成します)ポイント(2)

<form id="login" action="<?php echo $this->element->getAction(); ?>" 
method="<?php echo $this->element->getMethod(); ?>"> 
<p> 
    E-mail Address<br /> 
    <?php echo $this->element->email; ?> 
</p> 
<p> 
    Password<br /> 
    <?php echo $this->element->pswd; ?> 
</p> 
<p> 
    <?php echo $this->element->submit; ?> 
</p> 
</form> 

(6)そして、これが私のbootstrap.phpの

ある
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 

    public function _initRoutes() 
    { 

     $frontController = Zend_Controller_Front::getInstance(); 
     $router = $frontController->getRouter(); 


     $route = new Zend_Controller_Router_Route_Static (
      'login', 
      array('controller' => 'Account', 'action' => 'login') 
     ); 

     $router->addRoute('login', $route); 

     $route = new Zend_Controller_Router_Route (
      'games/asin/:asin/', 
      array('controller' => 'Games', 
        'action'  => 'view', 
        'asin'  => 'B000TG530M' // default value 
       ) 
     ); 
     $router->addRoute('game-asin-view', $route); 



    } 
} 
+0

私はあなたがデフォルトモジュールの 'controller/action'のためのルートを定義する必要はないと思います。 – NAVEED

+0

私のルートを削除しても動作しません – evil0

+0

エラーとして「内部サーバーエラー」と表示されますが、コードに問題はありません。 – Liyali

答えて

4

を変更し、あなたのクラスのデフで次へApplication_Model_FormLoginためinition:呼び出して終了あなたはinit()メソッドを使用してではなく、あなたのZend_Formため

あなたは、コンストラクタでparent::__construct($options);呼び出す__construct()を使用してフォームを設定する必要があり

<?php 

class Application_Model_FormLogin extends Zend_Form 
{ 
    public function init() 
    { 
     $this->setName('login'); 
     $this->setMethod('post'); // GET O POST 

     $this->setAction('/account/login'); // form action=[..] 

     $email = new Zend_Form_Element_Text('email'); 
     $email->setAttrib('size', 35); 

     $pswd = new Zend_Form_Element_Password('pswd'); 
     $pswd->setAttrib('size', 35); 

     $submit = new Zend_Form_Element_Submit('submit'); // submit button 

     $this->setDecorators(array(array('ViewScript', array('viewScript' => '_form_login.phtml')))); 
     $this->addElements(array($email, $pswd, $submit)); 
    } 
} 

、フォームの init()フォームの初期化と要素の作成が決して呼び出されないように、それ以降は何も実行されません。

parent::__construct()を呼び出していたため、フォームにはinit()メソッドがありませんでした。

+0

$ this->要素は、viewScriptデコレータを使用するときは正しいです。 $ this-> render(veiwScript)を使用すると、$ this->形式が正しいです – RockyFord

+0

私はそれがビュースクリプトデコレータで使用されていたことに気づきませんでした。ビュー・コードがビュー・スクリプト内にあるという完全な形式をレンダリングしていたので、私は考えました。私は今、その部分を削除しました。 – drew010

+0

あなたのソリューションはうまくいった、ありがとう。 しかし、別の問題が明らかになりました。致命的なエラー:クラス 'Application_Model_FormLogin'がapplication \ controllers \ AccountController.phpの18行目に見つかりませんでした。 基本的にZendはFormLogin.phpモデルをロードしません。私はブートストラップに何かが欠けていると思います。もう一度お世話になります。 – evil0

1

drew010は、フォームをではなく__construct()に設定するとよい点があります。

私はちょうどviewScriptメソッドで戦う時間を費やしました。これが私がそれを働かせる方法です(これまでのところ)。

  • $this->view->form = $form

  • は、あなたのビューであなたが
    <?php echo $this->render('_form_login.phtml')

  • この方法を使用する場合は、あなたが
    <?php echo $this->form->email; ?>を使用して要素にアクセスするようなもので、部分的にレンダリングするために必要なビューに割り当てます

  • この方法を使用すると、$this->setDecorators(array(array('ViewScript', array('viewScript' => '_form_login.phtml'))));行のコード。

これを行う適切な方法は、viewScriptデコレータを使用しますが、まだ動作させることができませんでした。私はこのデコレータを使用して、$this->element->elementnameを使用して要素にアクセスしなければならなかったが、メソッドまたはアクションにアクセスするためにはとにかく見つけることができませんでした。 getMethod()getAction()の両方がエラーを返しました。

私はそれが動作するようになった[EDIT] OK:

  • は、私は、コントローラでこれを追加したいinit()

  • $form->setDecorators(array( array('ViewScript', array('viewScript' => '_yourScript.phtml')) ));を使用して、通常のようにフォームを作成します。あなたのviewScriptで

  • $this->element代わりの$this->form

  • 通常$this->view->form = $form

  • これは通常<?php echo $this->form ?>

フォームをレンダリングビューにフォームを割り当てるを使用してフォームオブジェクトにアクセス私は仕事をしなければならない例...最終的に

<form action="<?php echo $this->element->getAction() ?>" 
     method="<?php echo $this->element->getMethod() ?>"> 
    <table> 
     <tr> 
      <td><?php echo $this->element->weekend->renderLabel() ?></td> 
      <td><?php echo $this->element->weekend->renderViewHelper() ?></td> 
      <td><?php echo $this->element->bidlocation->renderLabel() ?></td> 
      <td><?php echo $this->element->bidlocation->renderViewHelper() ?></td> 
      <td><?php echo $this->element->shift->renderLabel() ?></td> 
      <td><?php echo $this->element->shift->renderViewHelper() ?></td> 
     </tr> 
     <tr> 
      <td colspan="6"><?php echo $this->element->submit ?></td> 
     </tr> 
    </table> 
</form> 

私の足の口は瞬間的に治ると思います。

関連する問題