我有一个表单,其中有一个类别字段下拉列表,其中包含一个(OneToMany / ManyToOne)到一个帖子实体。
情况:现在客户端必须在下拉列表中选择类别,他们可能会错误地选择错误的类别,这将转到另一个博客(如果他们选择了错误的类别)并且他们无权将其更改回适当的类别。
为了缓解这个潜在的问题,我想做两个中的一个作为解决方案:
1)根据有权访问的类别
自动设置类别2)或限制用户仅选择他们有权访问的类别(例如,如果用户具有特定角色,则只有下拉列表才会显示此类别)
用户有一个ROLE_USER限制,允许他们只能CRUD他们有权访问的内容。
如,
ROLEUSER1只能访问/ category1(可以在此使用CRUD)
ROLEUSER2只能访问/ category2(可以在此使用CRUD)
ROLEUSER3只能访问/ category3(可以使用CRUD)
如何设置它以便客户端不会错误地选择错误的类别?
表格
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title')
->add('body')
->add('author')
->add('category')
->add('file', 'file', array(
'label' => 'Image',
'required' => false
))
->add('created');
}
控制器
public function job1CreateAction(Request $request)
{
$entity = new Post();
$form = $this->createCreateForm($entity);
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('job1_show', array('id' => $entity->getId())));
}
return array(
'entity' => $entity,
'form' => $form->createView(),
);
}
private function createCreateForm(Post $entity)
{
$form = $this->createForm(new PostType(), $entity, array(
'action' => $this->generateUrl('job1_create'),
'method' => 'POST',
));
$form->add('submit', 'submit', array('label' => 'Create'));
return $form;
}
答案 0 :(得分:1)
if ($this->get('security.context')->isGranted('ROLEUSER1') {
$entity->setCategory(CATEGORY1);
}
编辑:
控制器动作:
public function job1CreateAction(Request $request)
{
$entity = new Post();
if ($this->get('security.context')->isGranted('ROLEUSER1') {
$category1 = $this->getDoctrine()->getManager()->getRepository('MYBUNDLE:POST')->find(1); // we are getting category object. this is just an example cade, may be this will be different in your case
$entity->setCategory($category1);
}
$form = $this->createCreateForm($entity);
....
}
并形成:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title')
->add('body')
->add('author')
//->add('category')
->add('file', 'file', array(
'label' => 'Image',
'required' => false
))
->add('created');
}