我目前在我的控制器中有代码,它从数据库中检索3种类型的实体,以便填充3个选择字段。控制器还负责调用表单对象验证方法,并且在成功时,它从表单输入实例化和设置实体的属性,并在数据映射器上调用以保持它。我觉得我的控制器太胖了。关于我应该在哪里填写表格和处理代码的任何建议?我应该将它移动到表单对象中吗?提前准备你的时间!
答案 0 :(得分:1)
我更喜欢将表单处理放在表单中。所以我在表单中创建了一个process()方法,这样你就可以将所有表单逻辑封装在表单对象中。
例如在您的控制器中:
$form = myForumClass();
...
$form.process();
答案 1 :(得分:1)
你可能想看看Matthew Weier O'Phinney的Using Zend_Form in Your Models。它解释了如何将这种逻辑从控制器转移到模型中。
答案 2 :(得分:0)
对于数据库表,您应该创建模型 - 这些模型应该包含获取和设置数据到该表的逻辑。所以在这个例子中,模型应该负责获取一个值数组,然后传递给控制器然后传递给表单。
class MyModel
{
public function getSelectArray()
{
//Get stuff from Db here and format into an array ready to add to the form
}
}
然后您可以在控制器中执行此操作
$model = new MyModel();
$element->addMultiOptions($model->getSelectArray());
您还可以创建一个扩展Zend_Form
的特定表单类,然后可以从任何控制器调用它并返回相同的表单 - 允许您在任何地方轻松地重用表单 - 例如您可能需要在注册页面上显示与“我的个人资料”页面相同的表格。
作为一个例子,下面是我的模型中的一个函数:
public function getSelectArray()
{
$select = $this->select()->order(array("name ASC"));
$categories = $select->query()->fetchAll();
$return = array();
foreach($categories as $category)
$return[$category['id']] = $category['name'];
return $return;
}