Symfony2 Предварительно заполнить форму данными из модели? - PullRequest
2 голосов
/ 15 сентября 2011

У меня есть ProfileType следующим образом:

namespace Site\UserBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

class ProfileType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {       
        $builder->add('facebook', 'text', array('required'=>false))
            ->add('myspace', 'text', array('required'=>false))
            ->add('twitter', 'text', array('required'=>false))
            ->add('soundcloud', 'text', array('required'=>false))
            ->add('youtube', 'text', array('required'=>false))
            ->add('website', 'text', array('required'=>false))
            ->add('bio', 'textarea', array('required'=>false));
    }

    public function getName()
    {
        return 'profile';
    }
}

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

Мой контроллер:

namespace Site\UserBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\SecurityContext;
use Symfony\Component\HttpFoundation\Request;
use Site\UserBundle\Entity\Profile;
use Site\UserBundle\Form\Type\ProfileType;

class ProfileController extends Controller
{
    public function editAction()
    {           
        $em = $this->getDoctrine()->getEntityManager();
        $editprofile = $em->getRepository('SiteUserBundle:Profile')->findOneByUser($user = $this->get('security.context')->getToken()->getUser()->getId());

        $form = $this->createForm(new ProfileType(), $editprofile);

        $form->bindRequest($this->getRequest());
            if ($form->isValid()) {
                $editprofile->setUpdated(new \DateTime("now"));
                $em->flush();

                return $this->redirect($this->generateUrl('SiteUserBundle_login'));
            }

        return $this->render(
            'SiteUserBundle:Default:editprofile.html.twig', 
            array('form' => $form->createView())
        );
    }
}

Есть идеи? Я думал, что таким образом будет проще обновить профиль пользователя.

Ответы [ 4 ]

4 голосов
/ 08 декабря 2011

Замените

findOneByUser($id)

на

find($id)

Также попробуйте передать $ id как кусок от URL-адреса к вашему действию.URL: example.com/page/id

sampleAction($id){}
0 голосов
/ 26 июня 2013

Попробуйте сбросить $ editprofile, проверьте, что он возвращает, он должен вернуть все содержимое профиля.в вашем случае строка для конкретного идентификатора

0 голосов
/ 30 мая 2012

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

if ('POST' === $request->getMethod()) {
    $form->bindRequest($request);
    ...
}
0 голосов
/ 18 октября 2011

Прежде чем связывать:

$editProfile->setSomething... // the stuffs from the database
$form->setData($editProfile);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...