Поколение Symfony - PullRequest
       3

Поколение Symfony

2 голосов
/ 01 декабря 2010

Когда я генерирую модуль в symfony 1.4, он создает (например) методы «New» и «Create» следующим образом:

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

С --non-verbose-templates он генерирует что-то вроде кода нижеизменил его, чтобы показать только часть создания):

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

В чем причина такой генерации по умолчанию?Я думаю, что метод ниже является более компактным, добавляет меньшие маршруты и действия и не меняет URL для первого и следующего (если были ошибки) отображения формы.Но метод генерации по умолчанию должен быть лучшим или наиболее часто используемым.Так что же знают ребята из Sensio Labs, а я нет?

1 Ответ

2 голосов
/ 06 декабря 2010

Первый шаблон лучше подходит для создания приложения RESTful с Symfony.

Если вы хотите использовать умный sfObjectRouteCollection класс для создания коллекции маршрутов, тогда ожидаются оба метода executeNew и executeCreate.

sfObjectRouteCollection по умолчанию создает маршруты для следующих действий:

список, новое, создание, редактирование, обновление, удаление и отображение.

Вы правы, что в вашем предпочтительном шаблоне есть только один URL, но на самом деле это не проблема, если вы используете формы Doctrine / Propel и затем помощника form_tag_for () . Этот помощник принимает форму и имя коллекции маршрутов в качестве аргументов, а затем сам определяет, какой маршрут / URL-адрес использовать в коллекции правильно.

...