2016-08-24 4 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을 구축 할 것 :
만 remarque는이 코드를 다시 작성할 수 있다는 것입니다 관계와 게시물에 대한 루프 당신은 모든 게시물을 통해 루프에 원하는 authed 사용자가 소유 한 게시물에 대한 일부 사용자 지정 논리를 할 경우, 다른 손에

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

를 사용하여, 당신은 원래의 코드와 함께 갈 수 있어요. 내가

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

고마워요 ... 이것이 내가하려는 일입니다. –

+0

도 수정 해 주셔서 감사합니다. 특정 사용자의 게시물을 반복하거나 전체 게시물 모음을 반복하고 정규 사용자를위한 맞춤 로직을 수행하고 있습니까? – VaN

+0

게시물 모음을 반복합니다. 게시물은 컨트롤러에서 전달됩니다. 당신의 대답은 제가하고 싶은 바로 그 것입니다. twig에서 매개 변수를 엔티티로 전달하는 것이 가장 좋은 방법인지는 확실하지 않았습니다. –

0

예 우수 사례 예. 논리가 한 줄에 퍼지기 만하면 나는 이것이가는 길이라고 말할 수 있습니다.

{% for post in posts if post.isOwner(user_id)%} 
    .... 
{% endfor %} 
관련 문제