質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

1回答

1177閲覧

CakePHP3でrender結果のHTMLを取得したい

yokatone

総合スコア43

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2017/08/17 13:17

編集2017/08/17 13:29

###前提・実現したいこと
こんにちは。
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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

popobot

2017/08/18 14:43

ajaxで各ControllerのactionのURLにアクセスしてHTMLを取得するのではいけないのでしょうか?
yokatone

2017/08/19 09:47

PHP側でHTMLに対する処理を行ってクライアントサイドに渡したいので、PHP側で一連の動作を完結させたいです。
guest

回答1

0

ベストアンサー

requestAction()を使えばできそうです。
CakePHP3ではCellがあるので、マニュアルに記載はなさそうですが、使えました。

php

1$html = $this->requestAction( 2 ['controller' => 'Controller名', 'action' => 'action名'], 3 ['return', 'bare' => false] 4);

※パラメータの渡し方よくわかりませんでしたが...最悪第1引数のURLは文字列で渡せば問題なかったです。

参考:cakePHP requestAction()でlayoutもrenderする方法

投稿2017/08/19 13:58

popobot

総合スコア6586

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yokatone

2017/08/22 06:27

まさにこれです!ありがとうございます。 どうやらrequestActionで渡せるのはGET/POSTのクエリのみみたいですね。 URLを直接記述することで対処します。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問