2017-01-10 3 views
0

У меня возникли проблемы с попыткой сохранить данные с помощью доктрины. Я не понимаю, почему, но я могу получить данные из базы данных, но я не могу обновлять/вставлять/удалять.Doctrine (Silex) не может сохранить данные, нет ошибки

Я использую EntityManager с функциями perist() и заподлицо().

Я искал в google, где проблема могла быть, но я ничего не мог найти.

function editPage($id, Request $request, Application $app) { 
$data = array('id' => 0); 
if ($id != 0) { // existing page 
    $page = $app['em']->find('BLOG\\Models\\Page', $id); // get the page 
    $data = array(
     'titre'  => $page->getTitle(), 
     'slug'  => $page->getSlug(), 
     'contenu' => $page->getContent(), 
     'id'  => $id 
    ); 
} 

$form = $app['form.factory']->createBuilder(FormType::class, $data) 
    ->setAction($app['url_generator']->generate('adminPageEdit', array('id' => $id))) 
    ->setMethod('POST') 
    ->add('titre') 
    ->add('slug') 
    ->add('contenu', 'textarea') 
    ->add('id', 'hidden') 
    ->add('Envoyer', 'submit') 
    ->getForm(); 

$form->handleRequest($request); 

if ($form->isValid()) { 
    $data = $form->getData(); 

    if($id != 0) { // existing page 
     $page->setTitle($data['titre']); 
     $page->setSlug($data['slug']); 
     $page->setContent($data['contenu']); 
    } 
    else { 
     $page = new Page(
      $data['titre'], 
      $data['slug'], 
      $data['contenu'] 
     ); 
    } 

    $app['em']->persist($page); 
    $app['em']->flush(); 

    $app['session']->getFlashBag()->add('flash', 'Page validée!'); 
    return $app->redirect($app['url_generator']->generate('adminPagesList')); 
} 

    return $app['twig']->render('admin/editPage.twig', array('form' => $form->createView())); 
} 

Когда я пытаюсь использовать форму, нет абсолютно никаких изменений, но я получаю мгновенное сообщение, даже если бы я имел умереть(); перед перенаправлением.

Я надеюсь, что кто-то может помочь мне найти проблему.

С уважением.

ответ

1

Ну, я нашел решение, это просто, вы можете использовать функцию entityManager find(), просто используя var $ app ['em'], но вы не можете продолжать или скрываться с ним. Так что единственное, что нужно сделать, это поместить этот var в другой var, и он будет работать. Так решение:

$em = $app['em']; 
$em->persist($something); 
$em->flush(); 

Вместо непосредственного использования: $ приложение [ 'их'] -> сохраняются ($ что-то);

Смежные вопросы