0

我真的不知道如何用好标题,但这是我的问题。我决定不再使用 25 个控制器来处理页面,而是使用一个PageController带有 aviewAction参数的控制器:page- 例如,http://localhost/website/page/about-usPageController::viewAction()使用page = about-us. 所有页面都存储在模板文件夹中,因此 viewrenderer 设置为 render application\templates\default\about-us.phtml

我这样做是为了巩固,这似乎是一种更好的方法。我的问题如下:假设页面请求是contact-us,我需要Zend_Form在联系页面中使用。所以,我需要一种方法PageController::viewAction()来识别页面需要构建一个表单,构建表单,并且在提交时需要处理它(也许这应该在抽象处理方法中处理 - 不确定)。

我不知道如何实现这一点。我想也许我可以存储一个带有表单名称和连接页面标识符的列。更好的是,为表单创建一个一对多页面,然后在提交循环中通过表单并检查是否提交,如果是则处理它(也许isSubmitted()zend_form中有一个方法。我真的不知道如何处理这个,我正在寻找我能得到的任何帮助。

谢谢!

4

1 回答 1

0

以下是我想到的可能有用或帮助您指明适合您的方向的东西。

这可能只有在您每页不超过一个表单的情况下才能正常工作,如果您需要在一个页面上使用多个表单,您将不得不做一些超出此自动表单处理的事情。

为附加到页面的表单创建一个标准位置(例如应用程序/表单/页面)。这是保存与页面关联的自动表单的地方。

在您的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 回答