我真的不知道如何很好地说出这个标题,但这是我的问题。我决定不使用25个控制器来处理页面,我有一个PageController
带有viewAction
,其中包含:page
参数 - 例如,http://localhost/website/page/about-us
将指向PageController::viewAction()
1}}参数为page = about-us
。所有页面都存储在templates文件夹中,因此viewrenderer设置为呈现application\templates\default\about-us.phtml
。
我这样做,所以我可以巩固,这似乎是一个更好的方法。我的问题如下:让我们说当页面请求为contact-us
时,我需要在联系页面中使用Zend_Form
。所以,我需要在PageController::viewAction()
内部一种方法来识别页面需要构建一个表单,构建表单,并在提交时需要处理它(可能这应该在抽象的流程方法中处理 - 不确定)。
我不知道如何实现这一点。我想也许我可以存储一个包含表单名称和连接页面标识符的列。更好的是,为表单创建一对多的页面,然后在提交循环中通过表单并检查是否提交,如果是,则处理它(可能在zend_form中有一个isSubmitted()
方法。我真的不喜欢我不知道如何处理这个问题,我正在寻找任何帮助。
谢谢!
答案 0 :(得分: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;
}
所有这一切都遗漏了你为处理特定表单所采取的行动。由于联系表单可能会生成一封电子邮件,而另一种表单可能会将数据插入数据库,因此您需要某种回调系统或者可能需要自动映射的另一个类,其中包含表单处理器代码。
无论如何,首先想到的是这些内容,我希望这有助于为您提供更多的想法。