张贴到同一页的好习惯?

时间:2010-11-29 06:30:24

标签: php zend-framework forms process

我最近一直在阅读许多不同的东西,以提高我的编码质量。

我想知道将表单发布到同一页面是不是一个好习惯,我经常在当前的应用程序中使用这种类型的代码段。

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来重新呈现表单视图。

将表单提交到同一页面是不好的做法,如果是,为什么?

3 个答案:

答案 0 :(得分:2)

出于代码可读性和可维护性的目的,两个不同的控制器动作 - 尽管它们与相同的形式相关联 - 更好地分离为两个函数/脚本。

想象一下,如果所有CRUD操作都组合在一个函数/脚本中会是什么样子。那将是混乱的。

答案 1 :(得分:1)

我认为这不好。

无论我们使用相同的页面和不同的页面进行此操作。

两种方式在他们的位置都是正确的。

使用单页是一种很好的方式,使用2页可以让我们的代码成为一种管理方式。

在我看来,两者都是平等的。

答案 2 :(得分:1)

我的操作中,我更喜欢使用一个操作。这使所有的东西保持在一起。 O'Phinney的控制者可以像这样:

  • addAction(使用saveAction保存)
  • editAction(使用saveAction保存)
  • saveAction(不呈现自己)

为所有控制器保存/编辑逻辑设置一个方法是唯一的原因(假设!)来实现它和额外的操作。很酷,把所有东西放在一个地方。但是:这需要编辑和添加,以获得完全相同的逻辑。只要有if/else之类的

public function saveAction()
{
    if($action == 'edit)
    {
        // edit logic 
    } else if($action == 'add')
    {
        // add logic
    }
}

根据动作有不同的逻辑,这完全利用了一个动作的想法。因此,如果你知道逻辑总是相同的并且非常不值得改变,那么这就是为你节省大量编码工作的方法:)。

另一方面,如果您的添加/编辑逻辑有点不同,我会将所有逻辑保持在一起:

  • addAction(打印表单并保存在POST上)
  • editAction(打印表单并保存在POST上)

这可能看起来像代码重复(也许是),但是,我的编辑/添加操作有大约3-6行代码。但是,只要两者的逻辑发生变化,你就会知道这个地方。

所以这是个人意见,一旦事情变得更加复杂,我就会坚持采取分离行动。

(注意:对于逻辑我指的是控制器逻辑,所有数据逻辑都应该在模型中)