用于discrimin列的ArrayCollection过滤器

时间:2013-12-29 15:55:27

标签: symfony twig

我的实体有一个数组集合 我还有2个从主实体继承的其他实体

this is my code:

/**
 * FooBase
 *
 * @ORM\Table(name="mytable")
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="discr", type="string")
 * @ORM\DiscriminatorMap({
 *          "foo"                        = "\Entity\Foo",
 *          "bar"                        = "\Entity\Bar",
 * })
 * @ORM\Entity(repositoryClass="FooBaseRepository")
 */

在Twig我有这个代码

{{ profile.fooBaseCollection|length }}

我将返回整个ArrayCollection的长度

我只能用desc = foo检索项目? 像

这样的东西
$foo instanceof Foo

由于

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,你想在你的树枝模板中将对象与Foo和Bar类型分开。

在我看来,您不应该在视图中执行某些操作,您可以在操作或服务中过滤数组,并将结果发送到您的视图。

$foos = $profile->fooBaseCollection->filter(
    function($entry) {
        return $entry instanceof Foo;
    }
);

$bars = $profile->fooBaseCollection->filter(
    function($entry) {
        return $entry instanceof Bar;
    }
);

$twigVars = [
    'foos' => $foos,
    'bars' => $bars
];

如果您真的想在视图中执行此过程,最好的方法是在twig extension中编写此代码。