قم بإنشاء مسؤول عام واحد لكيانات متعددة ولكن اتصل بمسؤول معين عند التحرير

0

لنفترض أن لدي فئة كيان عقيدة مجردة

abstract class BaseClass
{
    private $title;
    private $description;
}

واثنين من فصول الأطفال الموروثة

class A extends BaseClass
{
}

ومع حقل إضافي

class B extends BaseClass
{
    private $extraField;
    ...
}

بالنسبة لهذين الكيانين ، أريد إنشاء مسؤول واحد لإدراج كليهما معًا في عرض واحد. حتى في بلدي admin.yml أضيف

AppBundle\Admin\BaseClassAdmin:
      tags:
        - { name: sonata.admin, manager_type: orm, label: "base" }
      arguments:
        - null
        - AppBundle\Entity\BaseClass
        -
      calls:
        - [setSubClasses, [{'A' : 'AppBundle\Entity\A', 'B' : 'AppBundle\Entity\B'}]]

وفئة إدارة BaseClass هي

class BaseClassAdmin extends AbstractAdmin
{
    protected function configureListFields(ListMapper $listMapper)
    {
        $listMapper
            ->addIdentifier('title');
    }

    protected function configureFormFields(FormMapper $form)
    {
        $form->add('title');
        $form->add('description');
    }
}

ما أريد القيام به هو أن عرض القائمة يعرض كلا النوعين ليس المشكلة. ولكن عندما أنقر على عنصر واحد من النوع B ، أريد إظهار الحقل الإضافي في النموذج الخاص بي. لكنها لا تفعل ذلك.

هذا هو السبب بدلاً من ذلك في استدعاء المسؤول المحدد لـ B (الذي تمت إضافة extraField في النموذج) استدعاء المسؤول العام فقط (BaseClassAdmin).

لذا سؤالي

هل هناك طريقة للاتصال بالمسؤول المعين المقابل لنوع الكيان من عرض القائمة؟ أم هي الطريقة الوحيدة لتعديل BaseClassAdmin وحلها عن طريق إضافة عبارات if القبيحة في طريقة النموذج؟

2 الاجابة

1
افضل جواب

تستطيع الاتصال $this->getSubject() في configureFormFields ، وأضف الحقول بشكل مشروط بناءً على مثيل التحقق.

https://symfony.com/doc/master/bundles/SonataAdminBundle/reference/advanced_configuration.html#inherited-classes

:مؤلف
0

ما يلحق إذا أضفت

$form->add('extrafield')

في صف المشرف الخاص بك؟

:مؤلف

أسئلة ذات صلة

فوق
قائمة طعام