我的主要表单如下:
class ArticleCreateType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options) {
$user = $options['user'];
$builder
->add('id')
->add('date')
->add('title');
if(in_array('ROLE_SUPER_ADMIN', $user->getRoles())) {
$builder->add('articlebody', new ArticleBodyType());
}
else {
// how to add only 'part1' from ArticleBody ??
}
}
...
}
并且身体部位的子形状如下:
class ArticleBodyType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('part1', 'textarea', array('required' => false))
->add('part2', 'textarea');
}
...
}
如果用户连接的不是管理员(即代替评论),我想添加 ONLY ' part1'来自ArticleBody的主要形式的字段。
我没有成功:
- 尝试访问' part1' ArticleCreateType中的字段
- 尝试从ArticleCreateType向ArticleBodyType发送$选项(但如果可能的话,我更愿意采用第一种方式)
谢谢你的帮助。
答案 0 :(得分:2)
我已将user
传递给ArticleBodyType
,并检查其中的用户角色..
class ArticleCreateType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options) {
$user = $options['user'];
$builder
->add('id')
->add('date')
->add('title')
->add('articlebody', new ArticleBodyType(), [
'user' => $user
]);
}
...
}
class ArticleBodyType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$user = $options['user'];
$builder->add('part1', 'textarea', array('required' => false));
if(in_array('ROLE_SUPER_ADMIN', $user->getRoles())) {
$builder->add('part2', 'textarea');
}
}
...
}