Symfony4 / Sonata: Tạo một Admin Nhiều/Nhiều

Chúng tôi sẽ phát triển ở đây tất cả các thao tác để xây dựng giao diện nhiều đến nhiều thông qua Sonata.
Chúng tôi sẽ lấy ví dụ về quản lý khu vực với kết nối qua các bộ phận. Mỗi khu vực như vậy được cấu tạo từ nhiều kết nối với bảng bộ phận.

Trong MysqlWorkbench, nó trông như thế này:

Sélection_123

Để tạo các thực thể, chúng tôi sử dụng lệnh sau:

php bin/console doctrine:mapping:import "App\Entity" annotation --path=src/Entity
Sélection_124

Tiếp theo, chúng tôi tạo các setter và getter trong các thực thể của mình bằng cách sử dụng lệnh:

php bin/console make:entity --regenerate App
Sélection_125-1

Giờ chỉ còn việc tạo CRUD Sonata của chúng tôi mà không quên xóa bộ nhớ cache.

php bin/console make:sonata:admin App/Entity/ZxZone
php bin/console cache:clear
Sélection_126

Giao diện của chúng tôi sẽ được tạo và dịch vụ cũng vậy. Chúng tôi vẫn phải thực hiện một số thao tác.

1 – Loại bỏ ID khỏi biểu mẫu tạo bản ghi của chúng tôi và thêm trường bộ phận của chúng tôi

//ajouter le use suivant
use Symfony\Bridge\Doctrine\Form\Type\EntityType;

//supprimez l'id, et ajouter la liaison département
  protected function configureFormFields(FormMapper $formMapper): void
    {
       $formMapper
           //->add('id')
            ->add('label')
            ->add('code')
            ->add('departement', EntityType::class, [
                'class' => 'App\Entity\Departement',
                'choice_label' => 'label',
                'label' => 'Départements',
                'required' => false,
                'by_reference' => false,
                'multiple' => true,
                'expanded' => false,
            ]);
    }

Trong định nghĩa bộ phận, chúng tôi yêu cầu hiển thị rõ ràng trường nhãn trong danh sách của chúng tôi, thông qua tham số "choice_label".

Điều này cho phép chúng tôi hiển thị nhãn đẹp hơn chỉ là id. Nhưng để làm được điều này, chúng tôi phải thêm các phương thức sau trong thực thể bộ phận.

//Permet d'afficher un nom plus sympa dans les messages du CRUD
    public function __toString(): ?string
    {
        return $this->id." : ".$this->nomClairRiche;
    }
//Permet d'afficher un label dans notre liste de configuration
    public function getLabel(): ?string
    {
        return $this->id." : ".$this->nomClairRiche;
    }
on2many