我最近一直在阅读许多不同的东西,以提高我的编码质量。
我想知道将表单发布到同一页面是不是一个好习惯,我经常在当前的应用程序中使用这种类型的代码段。
public function addAction(){
$form = new Application_Form_Add();
$this->view->form = $form;
if(!$this->_request->isPost() && $form->isValid($this->_request->getParams())){
$mapper = new Application_Model_ModelMapper();
$model = new Application_Model_Model($form->getValues());
if(!$mapper->save($model)){
$this->view->messages('an error occurred etc ... ');
return;
}
$this->_helper->redirector->gotoRoute(array('id' => $model->id), 'model_view');
}
}
所以我的添加操作在GET请求上显示表单并在POST请求上处理它。
我来到了Matthew Weier O'Phinney的article,我想每个人都同意他是当下的PHP大师之一。在他的例子中,他做了两个不同的动作一个来显示形式,一个来处理它。因此,如果表单未验证,则他会使用$this->render
来重新呈现表单视图。
将表单提交到同一页面是不好的做法,如果是,为什么?
答案 0 :(得分:2)
出于代码可读性和可维护性的目的,两个不同的控制器动作 - 尽管它们与相同的形式相关联 - 更好地分离为两个函数/脚本。
想象一下,如果所有CRUD操作都组合在一个函数/脚本中会是什么样子。那将是混乱的。
答案 1 :(得分:1)
我认为这不好。
无论我们使用相同的页面和不同的页面进行此操作。
两种方式在他们的位置都是正确的。
使用单页是一种很好的方式,使用2页可以让我们的代码成为一种管理方式。
在我看来,两者都是平等的。
答案 2 :(得分:1)
在我的操作中,我更喜欢使用一个操作。这使所有的东西保持在一起。 O'Phinney的控制者可以像这样:
为所有控制器保存/编辑逻辑设置一个方法是唯一的原因(假设!)来实现它和额外的操作。很酷,把所有东西放在一个地方。但是:这需要编辑和添加,以获得完全相同的逻辑。只要有if/else
之类的
public function saveAction()
{
if($action == 'edit)
{
// edit logic
} else if($action == 'add')
{
// add logic
}
}
根据动作有不同的逻辑,这完全利用了一个动作的想法。因此,如果你知道逻辑总是相同的并且非常不值得改变,那么这就是为你节省大量编码工作的方法:)。
另一方面,如果您的添加/编辑逻辑有点不同,我会将所有逻辑保持在一起:
这可能看起来像代码重复(也许是),但是,我的编辑/添加操作有大约3-6行代码。但是,只要两者的逻辑发生变化,你就会知道这个地方。
所以这是个人意见,一旦事情变得更加复杂,我就会坚持采取分离行动。
(注意:对于逻辑我指的是控制器逻辑,所有数据逻辑都应该在模型中)