Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 使用来自Twig的参数调用函数_Symfony_Doctrine Orm_Twig - Fatal编程技术网

Symfony 使用来自Twig的参数调用函数

Symfony 使用来自Twig的参数调用函数,symfony,doctrine-orm,twig,Symfony,Doctrine Orm,Twig,如果已经有人问过,我会道歉。我做了一些搜索,但没有找到一个简单的解决方案 我有一个symfony/doctrine项目。如果业务逻辑不应该放在视图中,那么从twig调用函数的合适方式是什么 我有一个对象数组,我想检查登录的用户是否是帖子中每个对象的所有者 例如,这是否合适 //in twig template {% for post in posts %} {% if post.isOwner(user_id) %} //do stuff

如果已经有人问过,我会道歉。我做了一些搜索,但没有找到一个简单的解决方案

我有一个symfony/doctrine项目。如果业务逻辑不应该放在视图中,那么从twig调用函数的合适方式是什么

我有一个对象数组,我想检查登录的用户是否是帖子中每个对象的所有者

例如,这是否合适

    //in twig template
    {% for post in posts %}
        {% if  post.isOwner(user_id) %}
            //do stuff
        {% endif %}
    {% endfor %}
在邮政实体中有这样的信息

    //in entity    
    public function isOwner(user_id){
        if (post.getId() == user_id)
            return true;
        return false
    }

如果这不是最佳实践,如何适当地实现这一点

似乎是个不错的做法是的。由于逻辑只分布在一行上,我认为这是一种方法。
唯一的问题是您可以将此代码重写为:

{% for post in posts if post.isOwner(user_id)%}
    ....
{% endfor %} 

不知道你想做什么,但是如果你想循环浏览一个特定的用户帖子,你宁愿建立一个双向关系并使用

{% for post in app.user.posts %}
另一方面,如果您想循环浏览所有帖子,并对授权用户拥有的帖子执行一些自定义逻辑,那么最好使用原始代码。但我会改变一些事情:

出于语义/可读性的原因,我会更改

//in twig template
{% for post in posts %}
    {% if  post.isOwner(user_id) %}
        //do stuff
    {% endif %}
{% endfor %}

我要纠正逻辑方法:

//in entity AcmeBundle\User    
public function isOwner(AcmeBundle\Post $post){
    if ($this == $post->getUser()) {
        return true;
    }

    return false;
}

在我看来,将逻辑放入实体(适合实体)是非常好的实践。如果您仍然有一些不适合您的实体的逻辑,并且您必须在Twig中处理这些逻辑,那么您应该创建Twig扩展。但这是一个很好的解决方案,只有当这个逻辑属于视图层时,非常感谢。。。这就是我想做的。谢谢你的更正,你是在循环浏览一个特定用户的帖子,还是在整个帖子集合中循环浏览,并为授权用户做一些自定义逻辑?我在循环浏览一个帖子集合。从控制器传递POST。你的答案正是我想要做的。我不确定将参数从细枝传递到实体是否是最佳实践
{% for post in posts %}
    {% if  post.isOwnedBy(app.user) %}
        //do stuff
    {% endif %}
{% endfor %}
//in entity AcmeBundle\User    
public function isOwner(AcmeBundle\Post $post){
    if ($this == $post->getUser()) {
        return true;
    }

    return false;
}