2012-10-10 4 views
1

일부 HTML을 동적으로 만드는 CakePHP 도우미를 만들어야합니다. 그러나 코드의 일부는 1-2 개의 데이터베이스 쿼리를 만드는 것입니다. 이 쿼리는 데이터가 채워지는 모든 텍스트가 데이터베이스 내부에 있으므로이 도우미에게 매우 중요합니다.CakePHP 도우미를 만드는 데 필요한 조언

MVC 패턴에 따르면, 나는 뷰 (도우미)에서 DB 쿼리를 작성해서는 안됩니다. 나는 PHPUnit 테스트와도 정렬되기를 원하면서이 디자인에 대해 최고의 디자인이 무엇인지 궁금하다.

다음 View 작업이 Controller에서 전달 된 (이미) 정보를 표시하는 순수하기 때문에

모든 아이디어를 환영 것 ...

답변

2

는, 나는 이런 식으로 뭔가있을 거라고 생각 컨트롤러 :

public function foo() { 
    $bar = $this->MyModel->find('all'); 
    $this->set(array('bar' => $bar)); 
} 

로보기 :

$result = $this->MyHelper->foo($bar); 
+0

좋은 Paulo ... 좋은 솔루션처럼 보입니다. 내가 생각하는 것은 데이터베이스 쿼리가 함수에서 모델에 포함된다는 것입니다. 이 함수는 컨트롤러에서 호출되고 출력은 도우미로 전달됩니다. 이렇게하면 Helper를 테스트하는 동안 모델 함수를 모의하고 Unit 테스트를 모델과 독립적으로 만들기 위해 원하는 데이터를 전달할 수 있습니다. –

1

당신은 구성 요소를 만들 수 있습니다

/** 
* Set data info 
* @access public 
* @return void 
*/ 
public function setData() 
{ 
    $data = $this->Model->find('first', $params); 
    $this->Controller->set('data', $data); 
} 

을 그리고 레이아웃에 도우미를 인쇄 : 대신 도우미의 요소가 될 수있는 일이 있다면

echo $this->MyNewHelper->someHtml($data); 
+1

구성 요소는 컨트롤러에 연결되어 있기 때문에 데이터를 처리하기에 좋지 않습니다. 모델에서 완료되고 뷰로 전달되어야합니다. 귀하의 예는 또한 실제 구성 요소를 보여주지 않습니다. –

0

, 당신은에 CakePHP의 RequestAction [details here]을 사용할 수 있습니다 요소에 필요한 데이터를 가져옵니다.

그런 다음 요소에 매개 변수를 전달하고 해당 매개 변수를 사용하여 컨트롤러에 전달하면 모델 호출이 수행됩니다.

요소는보기 만 표시하지만 데이터를 가져와야 (모델을 검색하는 데 여전히 모델을 사용함)하므로 매우 재사용 할 수 있으므로 MVC와 매우 잘 어울립니다.

관련 문제