2016-08-24 20 views
2

これは既に尋ねられている場合にはお詫び申し上げます。私はいくつかの検索をしてきましたが、簡単な解決策は見つかりませんでした。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 
    } 

を持っています。

+0

ロジックをエンティティ(エンティティに適合する)に入れることは、私の意見では非常に良い方法です。あなたのエンティティに合っていないロジックがまだ残っていて、Twigでそれを行う必要がある場合は、Twig拡張を作成する必要があります。しかし、このロジックがビューレイヤに属している場合にのみ、良い解決策です。http://symfony.com/doc/current/templating/twig_extension.html –

答えて

1

いけないu'reが何をしようか知っていますが、特定のユーザーの投稿をループする場合は、あなたではなく、二directionnalを構築したい:
のみレマルクは、あなたがこのコードを書き換えることができるということです関係し、投稿にループあなたはすべての記事をループしたいとauthedユーザーの投稿のためのいくつかのカスタム・ロジックをすれば、一方では

{% for post in app.user.posts %} 

を使用して、あなたのオリジナルのコードで行ってもいいです。 、セマンティック/可読性の理由

私は

//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 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; 
} 
+0

ありがとうございました...これは私がやろうとしていたものです。 –

+0

の修正もありがとうございます。特定のユーザーの投稿をループしているのですか、投稿全体をループして、指定されたユーザーのカスタムロジックを実行していますか? – VaN

+0

私は投稿のコレクションをループしています。投稿はコントローラから渡されます。あなたの答えはまさに私が探していたものです。 twigのパラメータをエンティティに渡すのがベストプラクティスかどうかはわかりませんでした –

0

はいいいえ。ロジックが1行にしか広がらないので、これはやり方です。

{% for post in posts if post.isOwner(user_id)%} 
    .... 
{% endfor %} 
関連する問題