0

タイトルをうまく表現する方法がよくわかりませんが、ここに私の問題があります。ページを処理するために 25 個のコントローラーを用意する代わりに、パラメーターを受け取るコントローラーを 1 つ用意PageControllerすることにしました。すべてのページは templates フォルダーに保存されるため、viewrenderer は render に設定されます。viewAction:pagehttp://localhost/website/page/about-usPageController::viewAction()page = about-usapplication\templates\default\about-us.phtml

統合できるようにこれを行いましたが、より良いアプローチのように思えました。私の質問は次のとおりです。ページ リクエストが の場合、連絡先ページ内で を使用contact-usする必要があるとしましょうZend_Form。そのためPageController::viewAction()、ページにフォームを作成し、フォームを作成し、送信時にそれを処理する必要があることを認識するための方法が必要です (おそらく、これは抽象プロセスメソッドで処理する必要があります-わかりません)。

これを実装する方法がわかりません。フォームの名前と接続ページ識別子を含む列を保存できるのではないかと考えました。さらに良いことに、フォームへの一対多のページを作成し、送信ループでフォームをループし、送信されたかどうかを確認し、送信されている場合はそれを処理します(おそらくisSubmitted()zend_form内にメソッドがあります。方法が本当にわかりませんこれを処理し、私が得ることができる助けを探しています。

ありがとう!

4

1 に答える 1

0

ここで、うまくいくかもしれない、またはあなたにとってうまくいく方向にあなたを向けるのに役立つかもしれない、頭に浮かんだ何かがあります.

これは、1 ページに 1 つしかフォームがない場合にのみうまく機能する可能性があります。1 ページに複数のフォームが必要な場合は、この自動フォーム処理以外の何かを行う必要があります。

ページに添付されるフォームの標準的な場所を作成します (例: アプリケーション/フォーム/ページ)。これは、ページに関連付けられた自動フォームが保持される場所です。

ではviewAction、オートローダーを利用して、そのページのフォームが存在するかどうかを確認できます。例えば:

$page  = $this->getParam('page');
$page  = ucfirst(preg_replace('/-(\w)/ie', "strtoupper('$1')", $page)); // contact-us -> ContactUs
$class = 'Application_Form_Page_' . $page;

// class_exists will invoke the autoloader to map a class to a file
if (class_exists($class)) {
    // a form is defined for this page
    $form = new $class();

    // check if form was posted
    if ($this->getRequest()->isPost()) {
        if ($form->isValid($this->getRequest()->getPost()) {
            // form is valid - determine how to process it
        }
    }

    // assign the form to the view
    $this->view->pageForm = $form;
}

これが実際に除外しているのは、特定のフォームを処理するために実行するアクションだけです。お問い合わせフォームは電子メールを生成する可能性が高く、別のフォームはデータベースにデータを挿入する可能性があるため、ある種のコールバック システム、またはフォーム プロセッサ コードを含む自動的にマップできる別のクラスが必要になる場合があります。

とにかく、それらの線に沿った何かが最初に頭に浮かんだものです。それがあなたにいくつかのアイデアを与えるのに役立つことを願っています.

于 2012-05-17T17:23:46.757 に答える