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にしても、フォルダを消さない限り、修正が繁栄されない。