Symfony 1.4 встроенная форма - PullRequest
       2

Symfony 1.4 встроенная форма

1 голос
/ 16 февраля 2011

У меня есть родительская форма PageForm и встроенная форма ContentForm. Страница имеет отношение один-ко-многим с Контентом. Когда PageForm редактируется, я вставляю только 1 ContentForm - это работает нормально. Вот метод настройки PageForm

$content = new content();
$content->Page = $this->getObject();
if (sfContext::getInstance()->getActionName() == 'new')
{
    $form = new contentForm($content);
} else
{
    $form = new contentForm($this->getObject()->getPublishedVersion());
}
$this->embedForm('content', $form);

метод getPublishedVersion() возвращает один объект содержимого.

Редактирование и сохранение работает нормально - при сохранении родительской формы также выполняется обновление для встроенного объекта в базе данных ...

Моя проблема в том, что я не хочу ОБНОВЛЯТЬ существующую запись, я хочу создать новую запись и увеличить столбец version_number. Я попытался переопределить метод saveEmbeddedForms() класса PageForm, но я нахожу его очень сложным - у кого-нибудь есть примеры или идеи, как мне это сделать?

Я пробовал это ->

if ($forms === null)
{
    $forms = $this->embeddedForms;
}
$newForm = new contentForm($forms['content']);
$newForm->save();
return parent::saveEmbeddedForms($con, $forms);

но его жалобы на то, что contentForm () ожидает и возражает ... как мне создать новый объект из массива?

1 Ответ

2 голосов
/ 16 февраля 2011

Вот как я это решил ...

public function saveEmbeddedForms($con = null, $forms = null)
{
    if ($forms === null)
    {
        $forms = $this->embeddedForms;
    }
    // create new object as copy
    $newcontent = $forms['content']->getObject()->copy(false);
    // unset the id
    unset($newcontent->id);
    // incerement version
    $version = $newcontent->getVersion();
    $newcontent->setVersion($version +1);
    // save new record
    $newcontent->save();
    return; // dont save the current record
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...