代码之家  ›  专栏  ›  技术社区  ›  RageZ

张贴到同一页的良好做法?

  •  1
  • RageZ  · 技术社区  · 14 年前

    为了提高我的编码质量,我最近读了很多不同的东西。

    我想知道在当前的应用程序中经常使用这种类型的代码片段将表单发布到同一页是否是一种好的做法。

    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');
        }
    }
    

    所以我的add操作在GET请求时显示表单,并在POST请求时处理它。

    我来过这里 article 关于马修·韦尔·奥菲尼,我想每个人都同意他是当下的PHP大师之一。在他的例子中,他做了两个不同的动作,一个显示表单,一个处理表单。所以如果表格不能证明他在玩 $this->render 以重新呈现窗体视图。

    把表格提交到同一页是不是一个坏习惯?如果是,为什么?

    3 回复  |  直到 7 年前
        1
  •  2
  •   bcosca    14 年前

    出于代码可读性和可维护性的目的,两个不同的控制器操作(尽管它们与同一表单关联)最好作为两个函数/脚本分开。

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

        2
  •  1
  •   user319198user319198    14 年前

    我觉得不坏。

    不管我们用相同的页面和不同的页面。

    两种方法都是正确的。

    使用单页是一种排序和甜蜜的方式,使用2页给我们的代码一种托管的方式。

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

        3
  •  1
  •   Fge    14 年前

    我的 我更喜欢用一个动作。所有的东西都放在一起。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行代码。但一旦两者的逻辑发生变化,你就真的知道这地方了。

    所以这是我个人的观点,一旦事情变得更复杂,我会坚持单独行动。

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