2012-09-10 6 views
7

私はSoftDeletableなどのGedmo Doctrine Extensionsを使用しています。さまざまな時点で、ユーザーがソフト削除されたエンティティまたはエンティティのソフト削除されたリレーションと対話できるように、このフィルタを無効にする必要があります。Symfony2.1でDoctrine2フィルタを無効にするよりスマートな方法はありますか?

これには、コントローラーに1回、SonataAdminの特定の領域に1回含まれますが、これに限定されません。

これまで私が見つけた解決策は、emでgetFilters()を呼び出し、softdeleteableを無効にすることです。これは問題ありません。

しかし、両方のソナタ管理クラスとコントローラがすでに無効フィルタを無効にしようとすると、致命的なの原因となる、複数の実行を経るように見えるので、私はこれをしなければならない。

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

言うこと自体がハック思われます少なくとも。

また、コマンドスコープなど他の問題もあります。私はまだフロントエンドに何の問題も見つけていませんが、管理者は、複数の実行(そのうちの1つはナビゲーションを構築することです)は、フィルタが常に無効になっていることを意味し、バックエンドのどこかで機能を無効にしたくないとすぐに、問題の重荷を引き起こすような気がします。

これを行うには良い方法がありますか?

答えて

3

書き込み時にしながら、答えはノー、あたりのエンティティ毎にフィルタを無効にする機能は、今では同様に、追加されていた。

// 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'); 

ドキュメント:https://github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/softdeleteable.md

+0

グッドキャッチ。 'disableForEntity()'をフィルタに実装する必要があります。 ['SoftDeletable'実装](https://github.com/l3pp4rd/DoctrineExtensions/blob/master/lib/Gedmo/SoftDeleteable/Filter/SoftDeleteableFilter.php#L53)を確認してください。 –

関連する問題