How can i access the user Role in Form Builder class in Symfony2
Pretty simple. Just make your custom form type a service, depending on the security context:
use Symfony\Component\Security\Core\SecurityContext;class UserType extends AbstractType{ private $securityContext; public function __construct(SecurityContext $securityContext) { $this->securityContext = $securityContext; } public function buildForm(FormBuilder $builder, array $options) { // Current logged user $user = $this->securityContext->getToken()->getUser(); // Add fields to the builder } public function getDefaultOptions(array $options) { return array( 'required' => false, 'data_class' => 'Acme\HelloBundle\Entity\User' ); } public function getName() { return 'user_type'; }}
Then mark the class as a service, with the special tag form.type
:
services: form.type.user: class: Acme\HelloBundle\Form\Type\UserType arguments: ["@security.context"] tags: - { name: form.type, alias: user_type }
In your controller, instead of doing new UserType()
, grap the service from the container:
$form = $this->createForm($this->get('form.type.user'), $data);