如果已经被问过,请道歉。我已经做了一些搜索而没有找到一个简单的解决方案。
我有一个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
}
如果这不是最佳实践,那么如何才能恰当地实现这一目标。
答案 0 :(得分:3)
不知道你正在尝试做什么,但如果你想要浏览特定的用户帖子,你宁愿建立一个双向关系并使用
循环帖子{% for post in app.user.posts %}
另一方面,如果您想循环浏览所有帖子并为authed用户拥有的帖子执行一些自定义逻辑,那么您最好使用原始代码。我会改变一些事情:
出于语义/可读性的原因,我会改变
//in twig template
{% for post in posts %}
{% if post.isOwner(user_id) %}
//do stuff
{% endif %}
{% endfor %}
到
//in twig template
{% for post in posts %}
{% if app.user.isOwner(post) %}
//do stuff
{% endif %}
{% endfor %}
或
{% 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;
}
答案 1 :(得分:1)
似乎是良好做法。由于逻辑只分布在一条线上,我说这是要走的路。
只有转换才能重写此代码:
{% for post in posts if post.isOwner(user_id)%}
....
{% endfor %}