View→Element→Controllerで、部分的にレンダリングする方法

2015年06月14日 10:25

(1)ViewからElementの呼び出し

        //View/index.ctp

        //RequestAction()を使用しているElementの呼び出し
        //注意 element呼び出し前のechoを忘れないこと!
        echo $this->element('ele', array(
            'param1' => "AAAA",
            'param2' => "BBB" ));
        
//        echo $this->element('ele', array(
//            'param1' => "AAAA",
//            'param2' => "BBB" ),
//                //cacheの引数をつかうと、FALSEだろうが、falseだろうが、フォルダを直接消さないと修正内容が反映されないので注意
//                array('cache' => false));
 
(2)ElementからControllerの呼び出し
//View/Element/ele.ctp
    
    //elemetの引数を使える
    echo $param1;
    echo $param2;
    
    //引数をurlにくっつける
    $name = $this->requestAction( 'RequestActions/get_name/' . $param1 );
        
    
    //requestAction先でレンダーした結果を返したいときは、引数にreturnを含める
    //そのため、requestAction先でViewを用意しないと、missingViewになる。
    //$name = $this->requestAction( array('controller' => 'RequestActions', 'action' => 'get_name'),
    //array('return'));
    echo $param1;
    echo $name;
    
?>
 
(3)コントローラーで値を返す
 
//Controller/RequestActionsController.php
 
App::uses('AppController', 'Controller');
 
class RequestActionsController extends AppController {
  //public $scaffold;
  //
   public $components = array('Session');
    // レイアウト関係
  public function get_name( $param1 ){
      
      debug($param1);
      //通常のURLとしてアクセスされると困るものは、この条件文を付加する
      if (empty($this->request->params['requested'])) {
throw new ForbiddenException();
}
      
      //戻り値が複数の場合は配列で返すしかないな。
      return 'ゆたかん';
  }
 
}
 
 
また、requestActionで、url指定以外で引数を渡す方法(urlでも同じ方法で渡せるとおもうが)
 
(2)Element→Controller
    $name = $this->requestAction( array('controller' => 'RequestActions',
                                        'action' => 'get_name'),
                                 array( "pass" => array( // 引数
                                                                $param1,
                                                                $param2,
                                                            ),)
                                );
    ※array( 'param1' => $param1)では渡せない
 
(3)Controller
 
   public function get_name( $param1,$param2 ){
      
      //debug($param1);
      debug($param1);
      debug($param2);
 
 
新たにうまれた疑問
・cacheをFALSEにしても、フォルダを消さない限り、修正が繁栄されない。