2

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

アクション:

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

小枝テンプレート

<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>

'user' プロパティは、ユーザー ID のエンティティを変数として取り、小枝形式でドロップダウン ボックスとして表示されます。現在ログインしている(認証された)ユーザーのIDを自動的に挿入し、可能であれば「ユーザー」フィールドに非表示にします。ユーザーのIDを取得していることを知っています

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

しかし、私はそれを機能させることはできません。

4

1 に答える 1

7

フォームに挿入し、ユーザーが編集できるようにする場合は、フォームに挿入する前に、 Guest オブジェクトでセットにユーザーを指定する必要があります。

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

それ以外の場合、編集できない場合は、フォームからこのフィールドを削除し、isValid() テストの後にユーザーを設定する必要があります。

于 2012-08-13T06:42:52.637 に答える