Symfony2 встроенный контроллер и проблема проверки формы - PullRequest
0 голосов
/ 30 марта 2012

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

Проблема заключается в том, что когда я обрабатываю форму и проверка не проходит, сводная таблица, созданная встроенным контроллером, показывает мне франшизу, которую я пытался изменить значениями, которые я ввел в форму, даже еслион не прошел валидацию, и база данных никогда не обновлялась.

В коде есть несколько испанских слов, поэтому просто для пояснения «franquicia» означает «франшиза»

Метод визуализации ипроверка формы:

public function editarAction($superusuario_id, $franquicia_id)
{
    $request = $this->getRequest();

    $em = $this->getDoctrine()->getEntityManager();
    $franquicia = $em->getRepository('FacturaBundle:Franquicia')->findOneById($franquicia_id);

    $form = $this->createForm(new FranquiciaType(), $franquicia);

    if($request->getMethod() == 'POST') 
    {
        $form->bindRequest($request);
        if($form->isValid()) 
        {
            $em = $this->getDoctrine()->getEntityManager();
            $em->persist($franquicia);
            $em->flush();
            return $this->redirect($this->generateUrl('s_listar_franquicias', array('superusuario_id'=>$superusuario_id)));
        }
    }

    return $this->render('FacturaBundle:Superusuario:franquicia-editar.html.twig', 
                   array('superusuario_id'=>$superusuario_id, 
                         'franquicia_id'=>$franquicia_id, 
                         'form'=>$form->createView(),  
                         'franquicia'=>$franquicia ));
}

Метод, используемый встроенным контроллером:

public function listarTodasAction($superusuario_id)
{
    $em = $this->getDoctrine()->getEntityManager();
    $franquicias = $em->getRepository('FacturaBundle:Franquicia')->findAll();

    return $this->render('FacturaBundle:Superusuario:franquicia-listar-todas.html.twig', array('superusuario_id'=>$superusuario_id, 'franquicias'=>$franquicias));
}

Я не вставляю код для шаблонов, потому что он слишком длинный, но я сделаюэто если нужно.

Кто-нибудь может мне помочь?

1 Ответ

2 голосов
/ 30 марта 2012

Основная проблема заключается в том, что $ form-> bindRequest фактически обновляет $ franquicia размещенной информацией. D2 кэширует все, поэтому изменения появляются позже. Используйте обновление, чтобы восстановить исходные данные:

    if($form->isValid()) 
    {
        ...
    }
    $this->getDoctrine()->getEntityManager()->refresh($franquicia);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...