###前提・実現したいこと
こんにちは。
CakePHPで各Controllerのaction結果のHTMLを取得して
JSONで返す関数を作りたいと考えています。
独立したControllerを作成して、
コントローラー名、アクション名、渡したいデータを指定すると
そこで表示されるHTMLを返すような関数を作ろうとしています。
検索しても別elementを利用して描画する方法だったり、
自分自身のコントローラーの結果をViewを使わず出力する方法だったり、
クリティカルな情報を見つけきれなかったので、
方法をご存知の方がおられたら是非教えてください。
###実現したいソースコード
javascript
1 2function getAjax(controller, action, param){ 3 var url = "../testController/getOtherHtml"; 4 var data = {controller: controller, action: action, param: param}; 5 6 var result = $.ajax({ 7 url : url, 8 type: "post", 9 dataType: "json", 10 data: data, 11 async: false 12 }).done(function (response) { 13 return response; 14 }).fail(function () { 15 return false; 16 }); 17 18 return result['responseJSON']; 19}
php
1 2class TestController extends AppController 3{ 4 public function initialize() 5 { 6 parent::initialize(); 7 $this->loadComponent('RequestHandler'); 8 $this->viewClass = 'Json'; 9 $this->response->type('json'); 10 } 11 12 public function getOtherHtml($controller, $action, $param) 13 { 14 $html = someCakePHPFunction(Controller名, action名, パラメーター); 15 $this->set('html'); 16 } 17} 18
php
1class TargetController extends AppController 2{ 3 public function targetView($id = null){ 4 $targetTable = $this->TargetTable->get($id); 5 $this->set(compact('targetTable')); 6 } 7}
php
1<!-- targetController/targetView.ctp --> 2 3<?= $targetTable ?>
html
1<html> 2<body> 3 <!-- targetTableの中身 --> 4</body> 5</html>
json
1<script> 2 var result = getAjax("targetController", "targetView", 1); 3 console.log(result); 4</script> 5 6responseJSON : { 7 <html> 8 <body> 9 <!-- targetTableの中身 --> 10 </body> 11 </html> 12}
###補足情報(言語/FW/ツール等のバージョンなど)
CakePHP 3.4.12
回答1件
あなたの回答
tips
プレビュー