edo1z blog

プログラミングなどに関するブログです

cakePHP2.3 エレメントからコントローラーにアクセスする(requestAction)

エレメント(例:/Elements/job/sub_search_box.ctp)の中で、下記のように使う。これでエレメントを表示する前に、コントローラーにアクセスして必要な情報を取ってきてくれる。

<?php $list = $this->requestAction('/jobs/get_list') ?>

上記の/jobs/get_listのコントローラーの内容は、下記のような感じになる。 通常のURLとしてアクセスされると困るので、$this->request->param['requested']が空の場合はありませんエラーを出している。

public function get_list(){
    if (empty($this->request->params['requested'])) {
        throw new ForbiddenException();
    }
    $list =  $this->get_lists_array($this->name_list);
    $list['time_option'] = $this->get_job_time_option();
    return $list;
}

エレメントを表示するビューは下記のようになる。 エレメントを表示する度にコントローラにアクセスすると重くなるので、キャッシュを使っている。下記のように使える。

<?php echo $this->element('jobs/sub_search_box', array('cache' => '+10 hour')); ?>