2013-01-20 2 views
1

Symfony2.1 프로젝트에서 템플릿 내부의 사용자 지정 엔티티 함수를 호출하는 방법은 무엇입니까? 정교하게, 다음과 같은 시나리오를 생각해보십시오; 다 대다 관계가있는 두 개의 엔터티가 있습니다 (사용자 및 범주).나뭇 가지 내부에서 저장소 클래스 메서드 사용

Doctrine2가 생성 한 이러한 방법 : 사용자 정의 함수와

{% for category in categories %} 
    <h2>{{ category.name }}</h2> 
    {% for user in category.users %} 
     {{ user.name }} 
    {% endfor %} 
{% endfor %} 

하지만 어떻게 내가 얻을 수있는 사용자 : 따라서

$user->getCategories(); 
$category->getUsers(); 

, 나는 같은 나뭇 가지에 다음을 사용할 수 있습니까? 예를 들어, 나는 몇 가지 옵션을 사용하여 사용자를 나열하려면이 같은 날짜별로 정렬 :이 내부 UserRepository.php 클래스에 대한 사용자 정의 함수를 작성하고 작동하도록 Category.php 클래스에 추가하려고

{% for user in category.verifiedUsersSortedByDate %} 

.

An exception has been thrown during the rendering of a template ("Warning: Missing argument 1 for Doctrine\ORM\EntityRepository::__construct(),

답변

3

그것은 컨트롤러 내에서 verifiedUsersSortedByDate 직접 다음 템플릿에 전달하여 검색하는 것이 훨씬 더 깨끗 그러나 나는 다음과 같은 오류가 발생했습니다.

//... 
$verifiedUsersSortedByDate = $this->getYourManager()->getVerifiedUsersSortedByDate(); 

return $this->render(
    'Xxx:xxx.xxx.html.twig', 
    array('verifiedUsersSortedByDate' => $verifiedUsersSortedByDate) 
); 

엔티티에서 추가 작업을하지 않는 것이 좋습니다. 문서에서 인용 된 것처럼 "엔티티는 데이터를 보유하는 기본 클래스"입니다. 엔티티의 작업을 가능한 한 기본으로 유지하고 entityManagers 내의 모든 "논리"를 적용하십시오.

코드에서 분실하지 않으려면, 그것은 당신을 통해 컨트롤러 내부의 사용자를 얻을 필요가 순서

1 - Entity. (Holds the data) 

2 - Entity Repositories. (Retrieve data from database, queries, etc...) 

3 - Entity Managers (Perform crucial operations where you can use some functions from your repositories as well as other services.....All the logic is in here! So that's how we can judge if an application id good or not) 

4 - Controller(takes request, return responses by most of the time rendering a template) 

5 - Template (render only!) 
+1

사실, 당신은 논리에 대해 잘못이다. 엔티티는 논리를 포함해야하는 유일한 장소입니다. 컨트롤러에 로직을 넣으려면 커다란 지저분한 코드를 반복적으로 보게 될 것입니다. – Zeljko

+0

@Zelijko에게 의견을 보내 주셔서 감사합니다. 컨트럴은 메타 데이터 만 보유하고 있습니다. 의사 "데이터를 보유하는 기본 클래스"입니다. 엔티티 관리자를 사용하여이 데이터를 작업하고 비즈니스 논리를 적용해야합니다. Ensemble의 용어 로직이 데이터 처리를 허용하는 entity + entityManager + 서비스를 가리킨다는 점을 알려드립니다. 나는 나의 대답을 분명히했다. 감사. – Mick

0

(엔티티에서 템플릿에) 형식의이 종류에 따라하는 것이 가장 좋습니다 저장소

$em = $this->getDoctrine()->getEntityManager(); 
$verifiedusers = $em->getRepository('MYBundle:User')->getVerifiedUsers(); 

return array(
      'verifiedusers'  => $verifiedusers, 
        ); 
    } 
관련 문제