Я работаю с Symfony 1.4 и propel, у меня есть форма для создания или обновления продуктов, а для действия формы у меня есть этот код ...
<form action="<?php echo url_for('products/'.($form->getObject()->isNew() ? 'create' : 'update').(!$form->getObject()->isNew() ? '?id='.$form->getObject()->getId() : '')) ?>" method="post" ?>>
, так что если объект продуктаесли он новый, то он переходит к products / create, но если продукт уже существует, он переходит к products / update? id = productID.
Все это прекрасно работает, но проблема в том, что у меня есть ссылка на продукты под названием«Новая версия» Когда вы нажимаете эту кнопку, ей нужно взять все данные из текущего продукта и заполнить ею форму, поэтому пользователю просто нужно внести любые необходимые изменения, а затем сохранить их как новую запись в базе данных.Проблема в том, что когда данные отправляются в форму через объект, isNew имеет значение false, поэтому они переходят на страницу обновления вместо create.
Метод для копирования:
public function executeCopy(sfWebRequest $request)
{
$this->forward404Unless($PlatformProduct = PlatformProductPeer::retrieveByPk($request->getParameter('id')), sprintf('Object PlatformProduct does not exist (%s).', $request->getParameter('id')));
$this->form = new PlatformProductForm($PlatformProduct);
$this->setTemplate('new');
}
Это отправляет данные в форму просто отлично, но я в растерянности из-за того, как заставить их вернуть isNew как истина, так что он создаетновая запись.Я довольно новичок в Symfony, и я работал с Cake раньше, в торт было так же просто, как если бы ID был установлен, он будет обновляться при сохранении, если ID не установлен, он будет вставляться при сохранении.