#php #symfony1 #copy #action #models
#php #symfony1 #Копировать #Экшен #Модели
Вопрос:
Мне нужно создать действие «Копировать» для листинга модели. Он должен принимать все значения из некоторой модели, заполнять их в формах, вы могли бы отредактировать всего несколько полей и после нажатия «сохранить» создать НОВУЮ модель. На данный момент я думал об объединении редактирования и новых действий таким образом:
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
<..>
}
Раздел РЕДАКТИРОВАНИЯ показывает, какие команды symphony выполняет, когда я нажимаю кнопку редактирования.
СОЗДАТЬ так же, как редактировать, просто создает новую модель.
я закончил с этим:
$this->form = $this->configuration->getForm($this->getRoute()->getObject());
$this->job_offer = $this->form->getObject();
И у меня не получилось. Это присваивает форме идентификатор модели, а поскольку идентификатор предопределен — он редактирует, а не создает модель.
Как я должен это сделать?
Ответ №1:
Вот пример:
//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();
}
}
Приветствия!
Комментарии:
1. Последние два шага немного не соответствуют инструкциям. Все, что я могу найти в шаблоне успеха, — это импорт с настройками и где именно модели перезаписывают формы? это библиотека / форма / аддон? Если да, то под каким именем? Я не могу найти эту часть нигде в документах.
2. editSuccess включает только часть формы. Для простоты я просто скопировал содержимое form partial в copySuccess. В качестве альтернативы вы можете создать, например, часть form_copy и включить ее в copySuccess.