2 Stimmen

Symfony2 Pre populate Formular mit Daten aus Modell?

Ich habe einen ProfileType wie folgt:

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';
    }
}

und ich möchte die Formularfelder mit Daten füllen, die sich bereits in der Datenbank befinden, damit sie im Formular sichtbar sind.

Mein Controller:

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())
        );
    }
}

Irgendwelche Ideen? Ich dachte, auf diese Weise wäre es einfacher, ein Benutzerprofil zu aktualisieren.

4voto

Jishnu G Nair Punkte 151

Ersetzen Sie

findOneByUser($id)

von

find($id)

Versuchen Sie auch, die $id als Slug von url an Ihre Action zu übergeben. url: example.com/page/id

sampleAction($id){}

0voto

François Constant Punkte 5269

Vor dem Binden:

$editProfile->setSomething... // the stuffs from the database
$form->setData($editProfile);

0voto

Bernhard Schussek Punkte 4773

Sie sollten die Anfrage nur dann an das Formular binden, wenn das Formular tatsächlich abgeschickt wurde.

if ('POST' === $request->getMethod()) {
    $form->bindRequest($request);
    ...
}

0voto

Ichigo Kurosaki Punkte 3685

Versuchen Sie, $editprofile zu dumpen, und prüfen Sie, was zurückgegeben wird. Es sollte alle Profilinhalte zurückgeben, in Ihrem Fall die Zeile für die bestimmte ID

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X