Voj*_*ech 5 php symfony doctrine-orm sonata-admin
我正在使用最新的 Symfony2 和 Sonata Admin 来维护我的网站,这是我的问题:
\n\n我有两个实体:商店和折扣。一个店铺可以有多个折扣,一个折扣可以分配给多个店铺。因此它应该是多对多关系。
\n\n我想在 ShopAdmin 中使用 sonatata 的 type_model_list,这样我就可以从弹出窗口中选择这些折扣并选择多个。这可能吗?
\n\n这是我的商店实体的一部分:
\n\nuse Doctrine\\Common\\Collections\\ArrayCollection; \n ...\n/**\n * @var \\Doctrine\\Common\\Collections\\ArrayCollection\n * @ORM\\ManyToMany(targetEntity="ShoppingFever\\ShoppingFeverBundle\\Entity\\Discount", fetch="EAGER")\n * @ORM\\JoinColumn(name="discountId", referencedColumnName="id")\n */\nprivate $discountId;\nRun Code Online (Sandbox Code Playgroud)\n\n这是函数configureFormFields的相对ShopAdmin:
\n\n$formMapper\n ->add(\'shopName\',null, array(\'label\' => \'N\xc3\xa1zev obchodu\'))\n ->add(\'brandName\',null, array(\'label\' => \'N\xc3\xa1zev brandu\'))\n ->add(\'discountId\', \'sonata_type_model_list\', array(\n \'btn_add\' => \'Add discount\', //Specify a custom label\n \'btn_list\' => \'button.list\', //which will be translated\n \'btn_delete\' => false, //or hide the button.\n \'btn_catalogue\' => \'SonataNewsBundle\' //Custom translation domain for buttons\n ), array(\n \'placeholder\' => \'Nothing selected\',\n \'expanded\' => true, \'multiple\' => true, \'by_reference\' => false\n ))\n ->add(\'street\',null, array(\'label\' => \'Ulice\'))\n ->add(\'city\',null, array(\'label\' => \'M\xc4\x9bsto\'))\n ->add(\'zip\',null, array(\'label\' => \'PS\xc4\x8c\'))\n ->add(\'gps\',null, array(\'label\' => \'GPS\'))\n ->add(\'openingHours\',\'textarea\', array(\'label\' => \'Otev\xc3\xadrac\xc3\xad doba\'))\n ->add(\'eventId\',null, array(\'required\'=>false,\'label\' => \'Event\'));\nRun Code Online (Sandbox Code Playgroud)\n\n如果我有一对多关系(对任何商店都有一个折扣),那么管理员就可以工作。Symfony 生成折扣和商店 ID 的参考表,以供多对多使用使用。
\n\n这是一对多输出,我希望它适用于多对多,所以现在它说施华洛世奇,会有几个折扣。
\n\n
是否也可以用多对多来做到这一点?
\n您不能sonata_type_model_list与多对多关系一起使用。
您可以做的是改用sonata_type_model并将选项设置multiple为true:
->add('discountId', 'sonata_type_model', array(
'multiple' => true,
// other options
))
Run Code Online (Sandbox Code Playgroud)
对于当前版本的SonataAdminBundle(截至今天 2019 年 2 月 18 日为 3.x),示例应如下所示:
// import ModelType
use Sonata\AdminBundle\Form\Type\ModelType;
// code example
->add('discountId', ModelType::class, [
'multiple' => true,
// other options
])
Run Code Online (Sandbox Code Playgroud)
这将创建一个下拉列表来选择多个相关对象,然后添加新按钮(或添加折扣,如果您设置了该槽btn_add)来创建新的相关对象。
| 归档时间: |
|
| 查看次数: |
1855 次 |
| 最近记录: |