2011-04-07 2 views
1

에서 requestAction 메서드를 호출하려면 어떻게해야합니까? controller으로 returns 결과는 제가 언급 한 조건을 기반으로합니까?cakephp requestAction 메소드 파일보기

감사합니다. 응용 프로그램마다 하나 개의 요청에 대한 두 개의 요청을 처리하는 본질적으로 - 그것은 완전히 새로운 파견 프로세스를 시작하기 때문에

+0

엘리야 (Elijan) : 왜 당신은보기에서 그것을하고 싶습니까? (심각한 질문) – dogmatic69

답변

5

, requestAction 매우 확대됨에없는 사용, 말하기 사용자가 만든 이런 이유로 가능한 한 많이 사용하지 않으려합니다. 즉, requestAction에 해당 용도가 있으며보기 캐싱을 사용하여 성능 저하를 줄일 수 있습니다.

requestAction으로 무엇을하고 싶은지 정확히 알기는 어렵지만 기본적으로 CakePHP에 다른 요청을 처리하도록 요청하는 것이므로 requestAction을 앱에 입력하면 처리 할 URL을 간단하게 전달할 수 있습니다. 브라우저의 주소 표시 줄 (프로토콜 및 호스트 이름 제외). 당신이 당신의 응용 프로그램에 의해 관리 블로그의 컬렉션을 검색하고 싶다면 :

$blogs = $this->requestAction('/blogs/index'); 

당신은 또한 당신이 HtmlHelper::link에 전달할 수와 같은 방식으로, 그것을 경로 성분의 배열을 전달하여 requestAction를 호출 할 수 있습니다. 그래서 당신은 따라서 블로그의 컬렉션을 검색 할 수 있습니다

$blogs = $this->requestAction('/blogs/index/author_id:1234'); 
    // or 
    $blogs = $this->requestAction('controller'=>'blogs', 'action'=>'index', 'author_id' => 1234); 
:

$blogs = $this->requestAction('controller'=>'blogs', 'action'=>'index'); 

있는 한을 requestAction에 의해 반환 된 결과 집합을 필터링으로, 그것은 다시 URL 또는 경로 구성 요소의 일부로서 조건을 전달하면됩니다

요청한 동작이 값을 반환하도록하려면 표준 동작 요청과는 다른 방식으로 요청을 처리하는 동작이 필요합니다. 제가 위에서 언급했던 BlogsController::index 작업을 위해, 다음과 같이 보일 수 있습니다

class BlogsController extends AppController{ 
    function index(){ 
    $conditions = array(); 
    if (isset($this->params['author_id'])){ 
     $conditions['Blog.author_id'] = $this->params['author_id']; 
    } 

    $blogs = $this->Blog->find('all', array('conditions'=>$conditions); 

    if (isset($this->params['requested']) && $this->params['requested'] == 1){ 
     return $blogs; 
    } 
    else{ 
     $this->set(compact('blogs')); 
    } 
    } 
} 

$this->params['requested']의 존재와 가치를 점검 if 문은 핵심 부분입니다. 작업이 requestAction에 의해 호출되었는지 여부를 확인합니다. 그렇다면 Blog::find에 의해 반환 된 블로그 모음을 반환합니다. 그렇지 않으면 콜렉션을 뷰에 사용 가능하게하고 제어기가 뷰 렌더링을 계속할 수있게합니다.

requestAction을 사용하면 필요한 특정 결과에 도달하는 데 많은 뉘앙스가 있지만, 위의 사항은 기본 사항을 제공해야합니다. 추가 문서는 dogmatic69으로 게시 된 링크를 확인하십시오. 물론 해당 주제에 대한 많은 질문이 있습니다.

후속 조치에 대한 의견을 언제든지 보내주십시오. 희망이 도움이되었습니다.

+0

당신이 추가 한 중괄호는 완전히 불필요합니다, FYI. 'if' 또는'else' 다음에 하나의 명령문 만 나타나면 중괄호로 묶을 필요가 없습니다. –

+5

가독성이 좋고 강력한 코딩 표준을 준수하는 경우를 제외하고는. 대부분의 if 문은 나중에 수정됩니다. 새로운 문장을 추가한다는 것은 중괄호를 추가해야한다는 것을 의미합니다. 그 일을 잊어 버리면 더 많은 디버깅 작업을 할 수 있으므로 다시는 내 보내지 않기로 결정했습니다.예외없이 NO CODE가 특정 부울 상태에 추가된다는 사실을 절대적으로 알고있는 경우를 제외하고는 매우 드뭅니다. –

0
$comments = $this->requestAction('/comments/latest'); 
foreach($comments as $comment) { 
    echo $comment['Comment']['title']; 
} 

넣어 당신의 CTP 파일에이 코드는 일반적으로