0

私はApressの本「ProZendFrameworkTechniques」に取り組んできました。ビューにフォームをレンダリングしようとしているところに到達しました。

フォームはと呼ばれBugReportforms/BugReportForm.php;にあります。ファイルの内容は次のとおりです。

<?php

class Form_BugReportForm extends Zend_Form
{
   public function init()
   {
      // add element: author textbox
      $author = this->createElement('text', 'author');
      $author->setLabel('Enter your name:');
      $author->setRequired(TRUE);
      $author->setAttrib('size', 30);
      $this->addElement($author);

      // add element: email textbox
      $email = $this->createElement('text', 'email');
      $email->setLabel('Your email address:');
      $email->setRequired(TRUE);
      $email->addValidator(new Zend_Validate_EmailAddress());
      $email->addFilters(array(
         new Zend_Filter_StringTrim(),
         new Zend_Filter_StringToLower()
         ));
      $email = setAttrib('size', 40);
      $this->addElement($email);

      // add element: date textbox
      $date = $this->createElement('text', 'date');
      $date->setLabel('Date the issue occurred (dd-mm-yyyy)');
      $date->setRequired(TRUE);
      $date->addValidator(new Zend_Validate_Date('MM-DD-YYYY'));
      $date->setAttrib('size', 20);
      $this->addElement($date);

      // add element: URL textbox
      $url = $this->createElement('text', 'url');
      $url->setLabel('Issue URL:');
      $url->setRequired(TRUE);
      $url->setAttrib('size', 50);
      $this->addElement($url);

      // add element: description text area
      $description = $this->createElement('textarea', 'description');
      $description->setLabel('Issue description:');
      $description->setRequired(TRUE);
      $description->setAttrib('cols', 50);
      $description->setAttrib('rows', 4);
      $this->addElement($description);

      // add element: priority select box
      $priority = $this->createElement('select', 'priority');
      $priority->setLabel('Issue priority:');
      $priority->setRequired(TRUE);
      $priority->addMultiOptions(array(
         'low'   =>   'Low',
         'med'   =>   'Medium',
         'high'   =>   'High'
         ));
      $this->addElement($priority);

      // add element: status select box
      $status = $this->createElement('select', 'status');
      $status->setLabel('Current status:');
      $status->setRequired(TRUE);
      $status->addMultiOptions(array(
         'new'         =>   'New',
         'in_progress'   =>   'In Progress',
         'resolved'      =>   'Resolved'
         ));
      $this->addElement($status);

      // add element: submit button
      $this->addElement('submit', 'submit', array('label' => 'Submit'));
   }
}

このフォームは、次のBugController場所にあるコントローラーを介して制御されます。/controllers/BugController.php

<?php

class BugController extends Zend_Controller_Action
{

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

    public function indexAction()
    {
        // action body
    }

    public function createAction()
    {
        // action body
    }

   public function submitAction()
   {
      $frmBugReport = new Form_BugReport();
      $frmBugReport->setAction('/bug/submit');
      $frmBugReport->setMethod('post');
      $this->view->form = $frmBugReport();
   }

}

そして最後に、ブートストラップに次のオートローダーがあります。

protected function _initAutoload()
{
   // Add autoloader empty namespace
   $autoLoader = Zend_Loader_Autoloader::getInstance();
   $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
      'basePath'      => APPLICATION_PATH,
      'namespace'      => '',
      'resourceTypes'   => array(
         'form'   => array(
            'path'      => 'forms/',
            'namespace'   => 'Form_',
         )
      ),
   ));

   // Return it so it can be stored by the bootstrap
   return $autoLoader;
}

私が得ているエラーはここで見ることができます:http://zend.danielgroves.net/bug/submit

または、読みたいだけの場合:致命的なエラー:クラス'Form_BugReport'が/home/www-data/zend.danielgroves.net/htdocs/application/controllers/BugController.phpの23行目に見つかりません

私が間違ったことについて何か考えはありますか?それで、これをどのように修正できますか?

編集

ArneRieは、私が間違ったクラス名を使用していると指摘しましたが、残念ながら、これで問題が解決することはありません。BugControllerの外観は次のとおりです。

<?php

class BugController extends Zend_Controller_Action
{

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

    public function indexAction()
    {
        // action body
    }

    public function createAction()
    {
        // action body
    }

    public function submitAction()
    {
        $frmBugReport = new Form_BugReportForm();
        $frmBugReport->setAction('/bug/submit');
        $frmBugReport->setMethod('post');
        $this->view->form = $frmBugReport;
    }

}

これは問題のエラーを取り除きましたが、新しいエラーが代わりに使用されました。

Parse error: syntax error, unexpected T_OBJECT_OPERATOR in /home/www-data/zend.danielgroves.net/htdocs/application/forms/BugReportForm.php on line 8

8行目は興味深いです/* Initialize action controller here */

4

2 に答える 2

2

小さなタイプミスがあります。バグはあなたのフォームにあります。9行目の「this」の前に$がありません。プロジェクトの残りの部分で頑張ってください。初心者にとっては非常に良い本ですが、いくつかの小さなエラーがあります。詳細については、編集者のWebサイトを確認してください:http://www.apress.com/9781430218791/正誤表のセクション。

<?php

class Form_BugReportForm extends Zend_Form
{
   public function init()
   {
      // add element: author textbox
//Next line is the line to change (add a $ before the "this")
      $author = $this->createElement('text', 'author');
      $author->setLabel('Enter your name:');
      $author->setRequired(TRUE);
      $author->setAttrib('size', 30);
      $this->addElement($author);
于 2012-07-24T14:24:58.510 に答える
1

で試してみてください:$frmBugReport = new Form_BugReportForm();

間違ったクラス名を使用しています。

于 2012-07-24T13:15:30.293 に答える