Symfony 1.4: создание действия «Копировать» - PullRequest
0 голосов
/ 07 апреля 2011

Мне нужно создать действие «Копировать» для списка моделей.Он должен взять все значения из какой-либо модели, заполнить их формами, вы можете отредактировать всего несколько полей, и после нажатия «сохранить» будет создана НОВАЯ модель.В настоящий момент я думал о слиянии действий «Правка» и «Новое» следующим образом:

public function executeListCopy(sfWebRequest $request)
  {
  # EDIT
  # $this->offer = $this->getRoute()->getObject();
  # $this->form = $this->configuration->getForm($this->offer);

  # NEW
  # $this->form = $this->configuration->getForm();
  # $this->offer = $this->form->getObject();

  # COPY
  <..>
   }

В разделе РЕДАКТИРОВАНИЕ показано, какие симфонии команд запускаются, когда я использую кнопку редактирования.
NEW, так же как редактирование просто создает новую модель.

Я запомнил это:

$this->form = $this->configuration->getForm($this->getRoute()->getObject());
$this->job_offer = $this->form->getObject();

И мне это не удалось.Это дает идентификатор модели в форме, и так как идентификатор предопределен - он редактирует, а не создает модель.

Как мне это сделать?

1 Ответ

0 голосов
/ 07 апреля 2011

Вот пример:

//routing
job:
  class: sfDoctrineRouteCollection
  options:
    model: Job
    module: job
    object_actions: {copy: get, updatecopy: post}

Создать 2 действия (на основе редактирования и обновления)

class jobActions extends sfActions
{
  public function executeCopy(sfWebRequest $request)
  {
    $this->form = new JobCopyForm($this->getRoute()->getObject());

    $this->setTemplate('copy');
  }
  public function executeUpdatecopy(sfWebRequest $request)
  {
    $this->form = new JobCopyForm($this->getRoute()->getObject());

    $this->processForm($request, $this->form);

    $this->setTemplate('copy');
  }
}

шаблон copySuccess такой же, как и editSuccess, за исключением того, что вам нужно указатьФорма для отправки данных:

<form action='<?php echo url_for('job_updatecopy', $form->getObject()) ?>' method='post'>

Создание и настройка формы, переопределение doSave

class JobCopyForm extends BaseJobForm
{
  public function configure()
  {
  }

  public function doSave($conn = null)
  {
    //update object values from form values
    $this->updateObject();
    //clone object
    $job = $this->getObject()->copy();
    //save a clone
    $job->save();

  }
}

Приветствия!

...