12

さて、私はユーザーが特定の役割を持っているかどうかを確認しようとしています、私はこれをしました

しかし、私がこれを行うとき:

public function buildForm(FormBuilder $builder, array $options)
{
    $builder
        ->add('nombre',null,array('label' => 'Usuario'))
        ->add('email')
        ->add('password', 'repeated', array(
            'type' => 'password',
            'invalid_message' => 'Los campos deben coincidir',
            'first_name' => 'password',
            'second_name' => 'confirmar password',
            'options' => array('required' => false)
            ))

        ->add('cliente', 'entity', array(
        'class' => 'ClientesBundle:Cliente',
        'empty_value' => 'Company',            
        'required'    => false,
        'empty_data'  => null)
    **)**
      $user = $this->securityContext->getToken()->getUser();
      **if ($user->getRol() == 'ROLE_SUPER_ADMIN'){**
        ->add('rol') 
        **}**
    ;

}

これも試しました:

 **if ($this->securityContext->getToken()->getUser()->getRol() === 'ROLE_SUPER_ADMIN'){**
            ->add('rol') 
            **}**

太字の線(**が付いている線)には、エラーを示す小さな赤い線があり、次の場合は予期しないことを示しています...これを修正するにはどうすればよいですか?

4

4 に答える 4

16

コントローラーからユーザーオブジェクトをフォームビルダーに渡す必要があります

$form = $this->createForm(
    new YourType(), 
    $data, 
    array('user' => $this->getUser())
);

次に、フォームビルダーで次から取得できます$options

public function buildForm(FormBuilder $builder, array $options)
{
    $user = $options['user']
}

インデックスで拡張setDefaultOptions()することを忘れないでください:user

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        ...
        'user' => null
    ));
}
于 2013-01-29T15:13:00.713 に答える
15

フォーム タイプをサービスとして宣言すると、クラスにトークン ストレージを挿入できます。

services.ymlしたがって、次のようにサービスを宣言します。

my_form:
    class: AppBundle\Services\MyFormType
    public: true
    arguments:  ['@security.token_storage']

そして、フォームクラスは次のようになります:

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;

class MyFormType extends AbstractType
{
    protected $tokenStorage;

    public function __construct(TokenStorage $tokenStorage)
    {
        $this->tokenStorage = $tokenStorage;
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $user = $this->tokenStorage->getToken()->getUser();
        // Use the user object to build the form
    }
}
于 2017-10-05T23:16:12.073 に答える