7

SoftDeletableなどのGedmoDoctrineExtensionsを使用していますが、ユーザーがソフト削除されたエンティティまたはエンティティのソフト削除された関係を操作できるように、さまざまな時点でこのフィルターを無効にする必要があります。

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

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

ただし、sonata adminクラスとコントローラーの両方が複数の実行を実行しているように見えるため、すでに無効になっているフィルターを無効にしようとすると致命的となるため、次のようにする必要があります。

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

控えめに言っても、それ自体がハッキーなようです。

ただし、コマンドのスコープなど、他の問題もあります。フロントエンドでまだ問題を発見していませんが、管理者では、ナビゲーションを構築するための複数の実行(私は思う)は、フィルターが常に無効になっていることを意味し、emで直接これを行うことしかできませんバックエンドのどこかで機能を無効にしたくないとすぐに、非常に多くの問題が発生するように思えます。

これを行うためのより良い方法はありますか?

4

1 に答える 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

于 2012-12-11T22:06:11.043 に答える