Symfony1 Symfony世代

Symfony1 Symfony世代,symfony1,code-generation,symfony-1.4,Symfony1,Code Generation,Symfony 1.4,当我在symfony 1.4中生成模块时,它会创建(例如)“新建”和“创建”方法,如下所示: public function executeNew(sfWebRequest $request) { $this->form = new SomeForm(); } public function executeCreate(sfWebRequest $request) { $this->forward404Unless($request->isMethod(sfReque

当我在symfony 1.4中生成模块时,它会创建(例如)“新建”和“创建”方法,如下所示:

public function executeNew(sfWebRequest $request)
{
  $this->form = new SomeForm();
}

public function executeCreate(sfWebRequest $request)
{
  $this->forward404Unless($request->isMethod(sfRequest::POST));

  $this->form = new SomeForm();
  $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
  if ($form->isValid())
  {
    $res_object = $form->save();
    $this->redirect('results_show', $res_object);
  }

  $this->setTemplate('new');
}
使用
--非详细模板
,它会生成如下代码(我对其进行了修改,仅显示创建部分):


这种默认生成的原因是什么?我认为下面的方法更紧凑,添加的路由和操作更少,并且不会更改第一个和下一个(如果有错误)表单显示的URL。但是默认的生成方法应该是最好的或最常用的。那么,Sensio实验室的人知道些什么,但我不知道?

第一个模板更适合使用Symfony构建RESTful应用程序

如果您想使用聪明的类来创建路由集合,那么executeNew和executeCreate方法都是必需的

sfObjectRouteCollection默认情况下为以下操作创建路由:

列表、新建、创建、编辑、更新、删除和显示


您的首选模板只有一个URL,这是正确的,但如果您使用的是Doctrine/Propel表单,然后是helperform\u tag\u for(),这实际上不是问题。此帮助程序将路由集合的形式和名称作为参数,然后自行确定要从集合中使用的正确路由/url。

但可能存在这种情况。用户填写的表单(部分表单/新建),但出现了一些错误(重定向到部分表单/创建)。他没有更多的时间来完成这项任务,但他想在将来完成一些填写(或者只是重新填写表格)。在这种情况下,用户会做什么?是-为页面添加书签。但当他回来时,他会看到什么?!404! 因为他将返回到仅对POST方法有效的操作(某些表单/创建)。我不认为这是好的。new和create可以共享相同的url,路由也可以根据请求类型进行区分。当然,但是您应该自己添加自定义规则以进行正确的设置,而这“从盒子里”是行不通的。我说得对吗?
public function executeNew(sfWebRequest $request)
{
  $this->forward404Unless($request->isMethod(sfRequest::POST));

  $this->form = new SomeForm();
  if ($request->isMethod(sfRequest::POST)) {
    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
    if ($form->isValid())
    {
      $res_object = $form->save();
      $this->redirect('results_show', $res_object);
    }
  }
}