来自Twig参数的呼叫功能
道歉,如果这已被问到。我做了一些搜索,没有找到一个简单的解决方案。来自Twig参数的呼叫功能
我有一个symfony/doctrine项目。考虑到业务逻辑不应放置在视图中,从小枝调用函数的适当方式是什么。
我有一个对象数组,我想检查登录用户是否是帖子中每个对象的所有者。
例如是这个合适
//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
}
如果这不是最好的做法,这可怎么适当地实现。
不知道什么你就像试图这样做,但如果你通过一个特定用户的帖子要循环,你宁愿建立一个双向directionnal关系和使用
{% 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;
}
非常感谢......这就是我正在尝试做的。感谢您的更正 –
您是循环浏览特定用户的帖子,还是循环浏览整篇文章并为authed用户做一些自定义逻辑? – VaN
我正在循环访问一系列帖子。帖子从控制器传递。你的回答正是我期待做的。我不确定是否将从树枝传递给实体的最佳做法 –
似乎好的做法是的。由于逻辑只分布在一条线上,我想说这是一条路。
只有雷马克的是,你可以重写这段代码:
{% for post in posts if post.isOwner(user_id)%}
....
{% endfor %}
在我看来,将逻辑放入实体(适合实体)是非常好的做法。如果你仍然有一些逻辑不适合你的实体,并且你必须在Twig中创建Twig,那么你应该创建Twig扩展。但是,只有当这个逻辑属于视图层时,它才是一个好的解决方案http://symfony.com/doc/current/templating/twig_extension.html –