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:
Để 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

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

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

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;
}
