Trao đổi về dự án
PHP symfony Sonata

Symfony 4 / Sonata: tạo một quản trị ManyToMany

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 MysqlWor...

Symfony 4 / Sonata: tạo một quản trị ManyToMany

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

Điều chỉnh ví dụ cho phù hợp với phiên bản đã cài đặt

Các ví dụ Symfony và Sonata vẫn gắn với các phiên bản được chỉ ra trong bài viết. Symfony 4.x và Symfony 6.2 không còn được duy trì: đối với một dự án hiện tại, hãy sử dụng một nhánh được duy trì và tài liệu tương ứng chính xác với các phụ thuộc của bạn.

php bin/console about
composer show symfony/framework-bundle sonata-project/admin-bundle

Trước khi tiếp tục với mã, hãy kiểm tra các chữ ký, dịch vụ, tuyến đường và mẫu liên quan. Sau đó thêm một bài kiểm tra chức năng bao phủ quyền, mã HTTP và kết quả hiển thị.

Tham chiếu : phiên bản Symfony được hỗ trợ.

Chia sẻ bài viết