4

有谁知道我如何摆脱允许在奏鸣曲管理表单中向集合中添加新项目的绿色加号?本机集合类型有allow_add 和allow_delete,但sonata_type_collection 似乎没有注意到这些选项。

我尝试了以下方法:

    ->add('store_orders', 'sonata_type_collection', array(), array(
      'type_options' => array('allow_add' => false),
    ))

没有效果

    ->add('store_orders', 'sonata_type_collection', array(
      'allow_add' => false
    ))

这给出了一个错误'选项“allow_add”不存在'

    ->add('store_orders', 'sonata_type_collection', array(
      'type_options' => array('allow_add' => false)
    ))

这也给出了一个错误'选项“allow_add”不存在'

我还想删除集合中每个项目旁边的删除复选框。我认为这个问题的答案在类似的领域。

任何帮助将不胜感激。

4

4 回答 4

12

尝试这个

->add('store_orders', 'sonata_type_collection', array(
      'btn_add' => false
    ))

当您将收藏添加到 Sonata 管理表单时,默认情况下会显示“添加新”按钮,为了防止显示“添加新”按钮或“+”,请将数组中的 add_btn 键设置为 FALSE,这是第三个add 函数中的参数。

于 2014-05-04T22:09:59.047 回答
1

我对 SonataAdminBundle 不太了解,但我想到了两个选项。

首先是使用类型集合而不是sonata_type_collection。我不确定这种变化会产生什么结果,但你可以给它一个 bash 看看会发生什么。

另一种选择是用您自己的模板覆盖模板。

复制

src\bundles\Sonata\AdminBundle\Resources\views\Form\form_admin_fields.html.twig

app\Resources\SonataAdminBundle\views\Form\form_admin_fields.html.twig

并删除该部分

{% if allow_add %}

或者你可以打电话

{% extends "SonataAdminBundle:Form:form_admin_fields.html.twig %}

只需更改 {% block collection_widget %}

我确信有更好的方法来实现这一点,但我仍然是 Symfony2 菜鸟,这是我能想到的唯一方法。

于 2012-03-13T19:21:22.967 回答
0

编辑:试试

->add('store_orders', null)

代替

->add('store_orders', 'sonata_type_collection', array(
      'allow_add' => false
    ))

Sonata 提供以下基于角色的对象访问权限:-

ROLE_SONATA_..._GUEST:允许查看对象和对象列表的访客;ROLE_SONATA_..._STAFF:可能是用户中最大的一部分,staff 用户拥有和 guest 一样的权限,另外还允许 EDIT 和 CREATE 新对象;ROLE_SONATA_..._EDITOR:编辑者被授予所有访问权限,并且与员工用户相比,允许删除和导出

ROLE_SONATA_..._ADMIN:授予管理用户所有访问权限,除此之外,还允许该用户授予其他用户访问权限。

很可能以下访问控制将分配给您的具有 STAFF 角色的用户(已登录 Sonata Admin)

'ROLE_.._NAME__EDIT',
    'ROLE_.._NAME__LIST',
    'ROLE_.._NAME__CREATE',
    'ROLE_.._NAME__VIEW',
    'ROLE_.._NAME__DELETE',
    'ROLE_.._NAME__OPERATOR',
    'ROLE_.._NAME__MASTER',

这些角色将分配给每个班级。

如果您想摆脱“绿色加号”,您只需要删除相应管理实体的 ROLE - 'ROLE_.. NAME _CREATE'。

如果您遇到困难,请参阅文档的这一部分。

于 2012-04-04T19:21:57.813 回答
0

1)您实际上可以创建一个模板扩展,然后仅将其用于特定字段,因此您最终不会在所有情况下都覆盖默认模板。

如果你想这样做,基本上你会想要创建一个像上面建议的 user1207727 这样的新模板,确保扩展你想要的模板:

{% extends "SonataAdminBundle:Form:form_admin_fields.html.twig %}

然后将它包含在您的表单中,仅用于您要删除添加按钮的字段:

$listMapper
->add('custom', 'string', array('template' => 'YourBundle:YourDirectory:your_template.html.twig'))

上面的代码说“显示该字段的 list_custom.html.twig 模板”。默认模板将在您未指定模板覆盖的所有情况下使用。

请参阅此代码以获取更多示例: https ://github.com/sonata-project/SonataMediaBundle/blob/2.0/Admin/BaseMediaAdmin.php

2)根据这篇文章: http ://groups.google.com/group/sonata-users/browse_thread/thread/6a94d662c8a6a17f 您还可以删除路由以删除添加按钮。我还没有尝试过,所以我不确定它是否有效。

configureRoute(RouteCollection $collection) {
  $collection->remove('edit');
} 
于 2012-05-01T18:07:17.877 回答