2012-09-10 22 views
7

Tôi đang sử dụng Gedmo Doctrine Extensions, chẳng hạn như SoftDeletable và tại các điểm khác nhau, tôi cần vô hiệu hóa bộ lọc này để người dùng có thể tương tác với các thực thể bị xóa mềm hoặc mối quan hệ bị xóa mềm của thực thể.Có cách nào thông minh hơn để vô hiệu hóa bộ lọc Doctrine2 trong Symfony2.1 không?

Điều này bao gồm nhưng không giới hạn, một lần trong bộ điều khiển và một lần nữa trong một khu vực cụ thể của SonataAdmin.

Cho đến nay giải pháp mà tôi đã tìm thấy là gọi getFilters() trên em và vô hiệu hóa softdeleteable, điều này là tốt.

Tuy nhiên cả hai lớp quản trị sonata và điều khiển dường như đi qua nhiều hành, gây ra một gây tử vong cố gắng vô hiệu hóa một bộ lọc đã bị vô hiệu, vì vậy tôi phải làm điều này:

if (array_key_exists('softdeleteable', $this->em->getFilters()->getEnabledFilters())) { 
     $this->em->getFilters()->disable('softdeleteable'); 
    } 

Mà dường như bản thân hacky để nói ít nhất.

Nhưng cũng có những vấn đề khác, chẳng hạn như phạm vi lệnh. Tôi chưa phát hiện bất kỳ vấn đề nào, nhưng trong quản trị, nhiều lần thực thi, một trong số đó là xây dựng điều hướng (tôi nghĩ) có nghĩa là bộ lọc luôn bị tắt và chỉ có thể thực hiện điều này trực tiếp trên dường như với tôi như nó sẽ gây ra một tải trọng của các vấn đề ngay sau khi tôi không muốn các chức năng vô hiệu hóa một nơi nào đó phụ trợ.

Có cách nào tốt hơn để thực hiện việc này không?

Trả lời

3

Trong khi tại thời điểm viết bài, câu trả lời là không, các chức năng để vô hiệu hóa bộ lọc trên một cơ sở cho mỗi thực thể hiện đã được thêm vào, như vậy:

// Enable/Disable filter filter, for specified entity (default is enabled for all) 
$filter = $em->getFilters()->enable('soft-deleteable'); 
$filter->disableForEntity('Entity\Article'); 
$filter->enableForEntity('Entity\Article'); 

Tài liệu: https://github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/softdeleteable.md

+0

Good catch . 'disableForEntity()' phải được triển khai trong bộ lọc. Kiểm tra triển khai ['SoftDeletable'] (https://github.com/l3pp4rd/DoctrineExtensions/blob/master/lib/Gedmo/SoftDeleteable/Filter/SoftDeleteableFilter.php#L53) –