0

ニュースレター購読のサイドバー ウィジェットとして使用するビュー ヘルパーを作成しました。フォームを作成するための公式の zf2 チュートリアルに従って、__invoke() 内に addAction のコードを使用して追加しました。

namespace Application\View\Helper;

use Zend\View\Helper\AbstractHelper;
use Application\Model\NewsletterTable;
use Application\Form\NewsletterForm;


class Newsletter extends AbstractHelper
{ 
    protected $newsletterTable;

    public function __construct(NewsletterTable $newsletterTable)
    {
        $this->newsletterTable = $newsletterTable;
    }

    public function __invoke()
    {      
        $form = new NewsletterForm();
        $form->get('submit')->setValue('Subscribe');

        $request = $this->getRequest();
        if ($request->isPost()) {
            $newsletter = new Newsletter();
            $form->setInputFilter($newsletter->getInputFilter());
            $form->setData($request->getPost());

            if ($form->isValid()) {
                $newsletter->exchangeArray($form->getData());
                $this->getNewsletterTable()->saveEmail($newsletter);
            }
        }

        return array('form' => $form);            
    } 

    public function getNewsletterTable()
    {
        if (!$this->newsletterTable) {
            $sm = $this->getServiceLocator();
            $this->newsletterTable = $sm->get('Application\Model\NewsletterTable');
        }
        return $this->newsletterTable;
    }      
}

次のコードは、エラー メッセージを返します。

Fatal error: Call to undefined method Application\View\Helper\Newsletter::getRequest()...

ヘルパー ファイルのコードを使用しているため、チュートリアルに記載されていないコードを追加する必要がありますか?

4

1 に答える 1

1

ビューヘルパーからのフォーム リクエストを処理するべきではありません。それはコントローラーの仕事です。

ビューヘルパーを使用してフォームを取得しますが、専用のページ (独自のコントローラー/アクションを使用) に投稿し、そのページでフォーム リクエストを処理します。

于 2013-11-12T07:29:07.787 に答える