Формы Symfony2: Как добавить данные в объект запроса перед его сохранением? - PullRequest
2 голосов
/ 08 августа 2011

Я слежу за обработкой форм Symfony2:

public function createAction()
 {
    $entity  = new Node();
    $request = $this->getRequest();
    $form    = $this->createForm(new NodeType(), $entity);

    $form->bindRequest($request);

    if ($form->isValid()) {
        $em = $this->getDoctrine()->getEntityManager();
        $em->persist($entity);

        $em->flush();

Проблема в том, что у сущности "Узел" есть некоторые другие поля, которые не заполняются пользователем, а скорее процессами в скрипте контроллера. Эти «сгенерированные системой» значения также должны сохраняться вместе с «сгенерированными пользователем» значениями из формы.

Я не уверен, как добавить системные значения к сущности.

Это недостаток в моих знаниях ООП, но я не могу найти никаких примеров в документах или в Интернете. Спасибо!

Ответы [ 2 ]

2 голосов
/ 08 августа 2011

Я думаю, вам нужно добавить некоторые методы getXXX / setXXX в класс Node (или заглянуть в код класса для них), чтобы ваш код выглядел как

$em = $this->getDoctrine()->getEntityManager();

$entity->setPropertyOne('some value of mine');
$entity->setCurrentUserId($this->get('security.context')
                          ->getToken()->getUser()->getId());
// another entity setters

$em->persist($entity);

Не знаю, если этоможет помочь вам в вашем случае, но я предлагаю прочитать о событиях Doctrine 2 здесь .

Я также настоятельно рекомендую вам прочитать эту (неофициальную) книгу Symfony2 :)

1 голос
/ 08 июля 2012

Если вы хотите управлять им в сущности, а не в контроллере. И если вы используете YML, просто добавьте это в файл YML

lifecycleCallbacks: 
prePersist: [ doPrePersist  ]

и в сущности просто добавьте этот метод

function doPrePersist() 
{
    $this->publish = true;
    $this->isDeleted = false;
}

Если вы используете аннотацию, то в сущности просто добавьте тег аннотации

/**
 * @ORM\prePersist
 */
function doPrePersist() 
{
    $this->publish = true;
    $this->isDeleted = false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...