Ran*_*ngh 16 php symfony doctrine-orm
我有UserType像这样的字段的形式
->add('description')
->add('createdAt')
Run Code Online (Sandbox Code Playgroud)
现在我希望如果登录用户有角色,(ROLE_SUPERADMIN)那么他可以看到这样的额外字段
->add('description')
if($user.hasRole(ROLE_SUPERADMIN))
->add('createdAt')
Run Code Online (Sandbox Code Playgroud)
实际上我必须为许多领域做到这一点.是否有任何方式我可以制作一些自定义类型,以便如果那种类型,那么只有管理员可以看到那些
->add('createdAt',"MyCustomType")
gre*_*emo 27
很简单.只需使您的自定义表单键入服务,具体取决于安全上下文:
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';
}
}
Run Code Online (Sandbox Code Playgroud)
然后使用特殊标记将该类标记为服务form.type:
services:
form.type.user:
class: Acme\HelloBundle\Form\Type\UserType
arguments: ["@security.context"]
tags:
- { name: form.type, alias: user_type }
Run Code Online (Sandbox Code Playgroud)
在您的控制器中,而不是执行操作new UserType(),从容器中获取服务:
$form = $this->createForm($this->get('form.type.user'), $data);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8294 次 |
| 最近记录: |