2014-01-10 3 views
1

내 프로젝트에서 고객 페이지에 사용자 정의 위젯을 표시합니다. 위젯 자체는 자주 변경되지 않으므로 여기서는보기 캐싱이 매우 유용 할 수 있다고 생각합니다.Cakephp 사용자 정의 키 기반 캐싱보기

그러나 모든 위젯은 Google 시스템에서 요청하는 회사에 따라 다릅니다.

내 질문에 캐시 도우미를 사용하고 있습니다 ... 또는 다른 방법으로 회사 ID를 기반으로 위젯을 캐시 할 수 있습니까?

<?php 
App::uses('AppController', 'Controller'); 

class widgetController extends AppController { 


    public $helpers = array('Cache'); 

    public $cacheAction = array(
     'iframeForm' => 3600, 
    ); 

    public $uses = array('Company'); 

    public function index($company_id) { 

     //... Load up a ton of data 

     $this->layout = 'widget'; 

     $this->set(compact(/* Set a ton of data */)); 

    } 
} 

이되도록 회사 ID를 기반으로 인덱스 뷰를 캐시 할 수 있는가 :

/widget/index/1 

하나의 복사본을 캐시에서 제공되지만 :

/widget/index/2 

다른를 얻을 것이다 캐시에서 복사 하시겠습니까?

우리는 현재 cake 2.3 및 php5.3에서 실행 중이며, cake2.4 및 php 5.5로 이동하면 도움이 될 것입니다. 나는 같은 것을 할 것

답변

0

:

컨트롤러 : 모델에서

public function index($company_id) { 

    //... Load up a ton of data 
    $this->Model->getStuff($company_id); 

    $this->layout = 'widget'; 

    $this->set(compact(/* Set a ton of data */)); 

} 

:

public function getStuff($company_id) { 
    if(($modelData = Cache::read('modelDataCompanyID_'. $company_id)) == null) 
    { 
     $modelData = $this->find('all',array('conditions' => 
      array('Model.company_id' => $company_id))); 
     Cache::write('modelDataCompanyID_'. $company_id, $modelData); 
    } 
    return $modeData; 
    } 
} 

이 당신이 원하는 무엇인가?

+0

모달 레이어를 캐시하고 싶지 않습니다 ... 뷰 레이어를 캐시하고 싶습니다. 보기는 액세스하는 각 회사마다 다르므로 캐시 도우미가 작동하지 않는 것처럼 보입니다. 그 이유는 내가 회사 ID가되는 키를 사용하여 뷰를 가져 와서 캐시하는 방법을 기대했기 때문입니다. 다음 번에 내가 모델 계층을 호출하기 전에이 캐시와 서버를 찾을 수있었습니다. . –