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

Symfony 4 / Sonata thêm một bộ lọc liên quan đến một thực thể OneToMany

Các bộ lọc được quản lý trong phương thức configureDatagridFilters protected function configureDatagridFilters(DatagridMapper $datagridMapper) { $filers=$datagridMapper->getAdmin()->getFilterParameters(); } Có thể thêm một bộ lọc đơn giản trên tiê...

Symfony 4 / Sonata thêm một bộ lọc liên quan đến một thực thể OneToMany

Các bộ lọc được quản lý trong phương thức configureDatagridFilters

protected function configureDatagridFilters(DatagridMapper $datagridMapper)
	{
$filers=$datagridMapper->getAdmin()->getFilterParameters();
}



Có thể thêm một bộ lọc đơn giản trên tiêu đề hoặc bất kỳ tham số nào của thực thể của chúng ta.
Tham số show_filter cho phép hiển thị nó khi trang tải. Kết hợp với giá trị của $filters, người ta có thể chỉ định để giữ phần tử hiển thị sau khi nộp bộ lọc.

Ví dụ, có thể thiết lập bộ lọc để hiển thị vĩnh viễn:

$datagridMapper
            ->add('title', null, ['show_filter' => true , 'label' => 'Titre'])

Hoặc chỉ hiển thị nếu nó đã được sử dụng

->add('enabled',null,['show_filter' =>!empty($filers['enabled']['value'])?true:null, 'label' => 'Actvé'])

Đối với mối quan hệ oneToMany, nếu thực thể của bạn được cấu hình chính xác, bạn có thể cấu hình đơn giản như sau:

$datagridMapper->add('field', null, ['show_filter' => true , 'label' => 'nom du champs']);

Cơ bản, không cần phải làm gì. Nhưng chúng ta có thể cần lọc các giá trị. Trong trường hợp này, chúng ta sẽ sử dụng doctrine để chỉnh sửa truy vấn lựa chọn cho các giá trị:

->add('slug', 'doctrine_orm_callback', ['show_filter' =>!empty($filers['slug']['value'])?true:null,  'label' => 'SEO Slug',
                'callback'  => function($queryBuilder, $alias, $field, $value)
                        {
                            $queryBuilder->andWhere($queryBuilder->expr()->like('o.slug', "'%".$value["value"]."%'"));
		                }
            ])

Chúng ta cũng có thể muốn tạo một danh sách được xây dựng một cách động bởi chính chúng ta:

 ->add('liste', 'doctrine_orm_choice', array(
                'label' => 'ma liste'),
                'choice',
                array(
                    'choices' => array(
                        'label value1' => 'value1',
                        'label value2' => 'value2',
                    ),
                    'expanded' => true,
                    'multiple' => true))

Đ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