Отображение данных из базы данных в формы в Symfony2 - PullRequest
2 голосов
/ 12 октября 2011

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

Я просмотрел книгу, и в ней подробно говорится об использовании формы для добавления данных. Однако, похоже, не упоминается, как формы могут использоваться для редактирования данных.

Как этого достичь?

Приветствия

Ответы [ 2 ]

3 голосов
/ 12 октября 2011

Если вы хотите, довольно легко написать ваше действие редактирования без доктрины, вы должны сделать что-то вроде этого:

public function editAction( $id ) {
$em = $this->getDoctrine()->getEntityManager();
$repository = $em->getRepository('YourBundle:YourEntity');
$element = $repository->find( $id );
if ( false !== is_null( $element ) ) {
    throw $this->createNotFoundException( 'Couldn\'t find element ' . $id . '!');
}
$form = $this->createForm( new YourFormType(), $element );
$request = $this->getRequest();
if ( $request->getMethod() == 'POST' ) {
    $form->bindRequest( $request );
    if ( $form->isValid() ) {
        $em->persist( $element );
        $em->flush();
        $this->get( 'session' )->setFlash( 'system-message', 'Element Updated!' );
        return $this->redirect( $this->generateUrl( 'Your_route' ) );
    }
}
return $this->render('YourBundle:YourView:your_template.html.twig', array( 'element' => $element, 'form' => $form->createView() ) );}

Единственное отличие действия edit с new Действие заключается в том, что вместо создания нового экземпляра "element" вы получаете его от менеджера сущностей, вы можете даже установить любые произвольные значения для вашего элемента, прежде чем присоединять его к форме.

Надеюсь, это поможет!

1 голос
/ 12 октября 2011

Используйте задачу generate:doctrine:crud для генерации кода для редактирования / обновления пользователей.Вы увидите, что newAction и editAction очень похожи.

...