2 Stimmen

Wie kann ich ein symfony2-Formular zu machen, um die aktuelle eingeloggte Benutzer-ID automatisch in einem Formular-Typ eingeben?

Ich habe ein Formular Typ in symfony2 :

namespace Acme\SomethingBundle\Form;

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

class GuestType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
            ->add('name')
            ->add('email')
            ->add('address')
            ->add('phone')
            ->add('created_at')
            ->add('updated_at')
            ->add('is_activated')
            ->add('user','entity', array('class'=>'Acme\SomethingBundle\Entity\User', 'property'=>'id' ));
    }

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

Die Aktion:

    /**
     * Displays a form to create a new Guest entity.
     *
     */
    public function newAction()
    {
        $entity = new Guest();
        $form   = $this->createForm(new GuestType(), $entity);

        return $this->render('AcmeSomethingBundle:Guest:new.html.twig', array(
            'entity' => $entity,
            'form'   => $form->createView()
        ));
    }

    /**
     * Creates a new Guest entity.
     *
     */
    public function createAction()
    {
        $entity  = new Guest();
        $request = $this->getRequest();
        $form    = $this->createForm(new GuestType(), $entity);
        $form->bindRequest($request);

        if ($form->isValid()) {
            $em = $this->getDoctrine()->getEntityManager();
            $em->persist($entity);
            $em->flush();

            return $this->redirect($this->generateUrl('guest_show', array('id' => $entity->getId())));

        }

        return $this->render('AcmeSomethingBundleBundle:Guest:new.html.twig', array(
            'entity' => $entity,
            'form'   => $form->createView()
        ));
    }

Twig-Vorlage

<h1>Guest creation</h1>
<form action="{{ path('guest_create') }}" method="post" {{ form_enctype(form) }}>
    {{ form_widget(form) }}
    <p>
        <button type="submit">Create</button>
    </p>
</form>

<ul class="record_actions">
    <li>
        <a href="{{ path('guest') }}">
            Back to the list
        </a>
    </li>
</ul>

die Eigenschaft "user" nimmt eine Entität von Benutzerkennungen als Variable auf und wird im Twig-Formular als Dropdown-Box angezeigt. Ich möchte, dass die Kennung des aktuell angemeldeten (authentifizierten) Benutzers automatisch - und wenn möglich verborgen - in das Feld "user" eingefügt wird. Ich weiß, dass ich die Kennung eines Benutzers erhalte mit

$user = $this->get('security.context')->getToken()->getUser();
$userId = $user->getId();

aber ich kann es nicht zum Laufen bringen.

7voto

guillaumepotier Punkte 7153

Sie müssen das Set dem Benutzer in Ihrem Guest-Objekt geben, bevor Sie es in das Formular einfügen, wenn Sie es im Formular haben wollen und es vom Benutzer bearbeitet werden kann:

$entity  = new Guest();
$entity->setUser($this->get('security.context')->getToken()->getUser());
$form    = $this->createForm(new GuestType(), $entity);

Andernfalls, wenn es nicht editierbar ist, sollten Sie dieses Feld aus dem Formular entfernen und den Benutzer nach der isValid () Test.

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