dongyuxiao6295 2015-03-06 18:12
浏览 27

Symfony,表单构建器实体类型,动态获取相关字段

My database structure: enter image description here

Each magazine had own wardrobes, wardrobe own shelfs etc(one to many relations)

So i add one to many relation magazine,wardrobe,shelf to item, like this:

class Item
{
 //...

    /**
     * @ORM\ManyToOne(targetEntity="Raltech\WarehouseBundle\Entity\Magazine", inversedBy="items")
     * @ORM\JoinColumn(name="magazine_id", referencedColumnName="id",onDelete="SET NULL")
     */
    private $magazine;

    /**
     * @ORM\ManyToOne(targetEntity="Raltech\WarehouseBundle\Entity\Wardrobe", inversedBy="items")
     * @ORM\JoinColumn(name="wardrobe_id", referencedColumnName="id",onDelete="SET NULL")
     */
    private $wardrobe;

    /**
     * @ORM\ManyToOne(targetEntity="Raltech\WarehouseBundle\Entity\Shelf", inversedBy="items")
     * @ORM\JoinColumn(name="shelf_id", referencedColumnName="id",onDelete="SET NULL")
     */
    private $shelf;

And i had form,

<?php

namespace Raltech\WarehouseBundle\Form\FormType;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;

class ItemForm extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add(
                'name',
                'text',
                array(
                    'label' => 'Nazwa'
                )
            )
            ->add(
                'description',
                'textarea',
                array(
                    'label' => 'Opis',
                    'required' => false
                )
            )
            ->add(
                'category',
                'entity',
                array(
                    'empty_value' => '',
                    'required' => false,
                    'class' => 'WarehouseBundle:Category',
                    'property' => 'name',
                    'label' => 'Kategoria',
                )
            )
            ->add(
                'magazine',
                'entity',
                array(
                    'empty_value' => '',
                    'required' => false,
                    'class' => 'WarehouseBundle:Magazine',
                    'property' => 'name',
                    'label' => 'Magazyn',
                )
            )
            ->add(
                'file',
                'vich_file',
                array(
                    'label' => 'Załącznik (maksymalnie 50 MB)',
                    'attr' => array(
                        'class' => 'filestyle',
                        'data-buttonName' => 'btn-primary',
                        'data-buttonText' => "Przeglądaj"
                    )
                ,
                    'required' => false,
                    'download_link' => false,
                )
            );

        if ($builder->getData()->getId()) { // or !getId()
            // $builder->add('delete', 'checkbox'); // or whatever
        }

    }

    public function configureOptions(OptionsResolver $resolver)
    {

        $resolver->setDefaults(
            array(
                'data_class' => 'Raltech\WarehouseBundle\Entity\Item',
            )
        );
    }

    public function getName()
    {
        return 'ItemForm';
    }
}

And I want to add related fields wardrobe and shelf. If i choose magazine i want to AJAX get related Wardrobes etc.

How to do this? How add fields in form builder? How AJAX modify select? (action in controller?)

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥100 set_link_state
    • ¥15 虚幻5 UE美术毛发渲染
    • ¥15 CVRP 图论 物流运输优化
    • ¥15 Tableau online 嵌入ppt失败
    • ¥100 支付宝网页转账系统不识别账号
    • ¥15 基于单片机的靶位控制系统
    • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
    • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
    • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
    • ¥15 手机接入宽带网线,如何释放宽带全部速度