簡體   English   中英

奏鳴曲:處理sonata_type_model(一對多)

[英]sonata: Dealing with sonata_type_model (one-to-many)

1-我有一個實體:

EmployeeMedicalService

/**
 * @ORM\Entity
 * @ORM\Table(name="employee_medical_file")
 */
class EmployeeMedicalService extends BaseEntity
{

   //
   // Some
   // Fields
   //


    /**
     * @Assert\NotBlank
     * @ORM\ManyToOne(targetEntity="PersonnelBundle\Entity\Lookup\Lookup")
     * @ORM\JoinColumn(name="medical_service_id", referencedColumnName="id")
     */
    private $medicalService;

   //
   // getters
   // & setters
   //

2-另一個實體:

抬頭

/**
 * @ORM\Entity
 * @ORM\Table(name="lookup")
 * @UniqueEntity(fields="name")
 */
class Lookup extends BaseEntity
{
    // const ...
    const TYPE_MEDICAL_SERVICE = 'medical_service';
    // more constants ...

    public function __construct($type)
    {
        $this->type = $type;
    }

     //
     // Some Fields
     //

    /**
     * @var string
     * --stuff--
     */
    private $name;

    /**
     * @var string
     * 
     * @ORM\Column(name="type", type="string", length=50)
     * @Assert\NotBlank
     */
    private $type;

    //getters
    // &setters

現在在

EmployeeMedicalServiceAdmin

protected function configureFormFields(\Sonata\AdminBundle\Form\FormMapper $formMapper)
    {

        $msquery = $this->getModelManager()
                ->getEntityManager('PersonnelBundle:Lookup\Lookup')
                ->createQueryBuilder();

        $msquery->select('l')->from('PersonnelBundle:Lookup\Lookup', 'l')->where('l.type = :type')
                ->orderBy('l.name', 'ASC')
                ->setParameter('type', 'medical_service');

        $formMapper
                ->add(..)

                ->add('medicalService', 'sonata_type_model', array(
                    'label' => 'personnel.employee.medical_service.form.medical_service',
                    'property' => 'name',
                    'placeholder' => '',
                    'required' => false,
                    'query' => $msquery,
                ))

                ->add(..)
        ;
    }

** 我的問題: **

當我嘗試從EmployeeMedicalService Admin表單中添加新的醫療服務時,我需要從EmployeeMedicalService Admin表單中添加新查找表(醫療服務)的表單,該字段的Type值設置為'medical_service'。如果“ 類型”設置為NULL,則添加不帶值的查找


這是

LookupAdmin

protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper
                ->add('name', 'text', array(
                    'label' => 'personnel.lookup.form.name'
                ))
                ->add('type', 'hidden', array(
                    'label' => 'personnel.lookup.form.type',
                ))
        ;
    }

如果檢查ajax請求的彈出表單,則會注意到額外的查詢參數,例如pcode 您可以檢查此參數是否存在並且等於EmployeeMedicalServiceAdmin管理員類代碼,然后將lookup類型設置為medical_service

UPDATE

getNewInstance()方法中添加以下邏輯之王:

public function getNewInstance()
{
    $type = isset($_GET['pcode']) ? 'medical_service' : '';
    $instance = new \PersonnelBundle\Entity\Employee\EmployeeMedicalService($type);

    return $object;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM