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

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

新規登録して質問してみよう
ただいま回答率
85.37%
Chart.js

Chart.jsは、多様なグラフを組み込めるJavaScriptのライブラリ。折れ線グラフや棒グラフ、円グラフ、レーダーチャートなどのグラフの種類が用意されています。HTML5のCanvasを用いて描画され、マークアップも分かりやすく、簡単に編集することが可能です。

PHP

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

CakePHP

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

Q&A

解決済

2回答

1398閲覧

Cakephp3のコントローラからsetメソッドでviewに渡した変数をChart.jsで使いたい

susumu_0414

総合スコア37

Chart.js

Chart.jsは、多様なグラフを組み込めるJavaScriptのライブラリ。折れ線グラフや棒グラフ、円グラフ、レーダーチャートなどのグラフの種類が用意されています。HTML5のCanvasを用いて描画され、マークアップも分かりやすく、簡単に編集することが可能です。

PHP

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

CakePHP

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

0グッド

1クリップ

投稿2020/03/18 05:46

cakephp3のコントローラからsetメソッドで変数chart_data1にデータをセットして
View側のChart.jsのdataプロパティに変数chart_data1を渡してグラフを表示したいのですが、思うように実装できません。
実装の仕方を教えて頂けますでしょうか。

php

1class Frmsv0170Controller extends FrmBaseController 2 public function index($id_page = ""){ 34 $this->set('chart_data1',[12, 19, 3, 17, 6, 3, 7]); 5 略 6 }

tpl

1 <canvas id="myChart"></canvas> 2 <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.bundle.js"></script> 3 <script> 4 var ctx = document.getElementById('myChart').getContext('2d'); 5 var myChart = new Chart(ctx, { 6 type: 'line', 7 data: { 8 labels: ['M', 'T', 'W', 'T', 'F', 'S', 'S'], 9 datasets: [{ 10 label: 'apples', 11 data: $chart_data1, ←ここでコントローラからの変数を受け取りたい 12 // data: [12, 19, 3, 17, 6, 3, 7], 13 backgroundColor: "rgba(153,255,51,0.4)" 14 }, { 15 label: 'oranges', 16 data: [2, 29, 5, 5, 2, 3, 10], 17 backgroundColor: "rgba(255,153,0,0.4)" 18 }] 19 } 20 }); 21 </script>

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

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

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

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

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

guest

回答2

0

PHP はサーバ側で動いて最終的に HTML として、変数の中身を吐きます。
一方 JavaScript はクライアント側で動くため、PHP から直接はデータを受け取れません。
※PHP が <script> タグの中身まで含めて出力しているならあらかじめ埋め込むことはできますが

受け取る方法としては

  1. セッションに記録しておいて、JavaScript でセッションから読み取って使用する
  2. HTML 内に hidden の input を設けて、そこにデータを突っ込んでおいて、JavaScript ではそこから取り出す

などがあります。
※両者がともにアクセスできるのは HTML かクッキーかセッションなので、それらを仲介役にしないとデータがやりとりできない

2 をする場合、データ内に ' や " や印字不可の文字があったりすると HTML を崩してしまいます。
例えばでかくて複雑な構造を持つデータならば、PHP 側で JSON オブジェクトにして、それをシリアライズ→Base64エンコードして書き込み、JavaSCript は逆手順で展開して JSON オブジェクトを手に入れる、というのもありでしょう。

投稿2020/03/18 06:05

tacsheaven

総合スコア13703

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

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

susumu_0414

2020/03/18 06:36

丁寧な回答ありがとうございます! HTML内に情報を入れるか、セッションかクッキー経由でないとデータを共有することができないとのことで大変勉強になりました。 しかし、ダメもとで上記のnojimageさんの回答のようにjson_encodeと書いてやると変数を使用できました。。。 なぜこれで受け取れたのか謎です。
tacsheaven

2020/03/18 06:40

回答にあるように「PHP が <script> タグの中身まで含めて出力している」ので、script タグ内の JavaScript ソースコードに直接変数の値を書き込めているからです。 JavaScript が別ファイルになっているような状況では使えません。
susumu_0414

2020/03/18 06:42

なるほど!わかりました。 ありがとうございます。
guest

0

ベストアンサー

JavaScriptがテンプレート中に書かれている前提であれば、PHP → JavaScriptへのデータの変換は json_encode を利用するのが簡単です。

label: 'apples', data: <?= json_encode($chart_data1) ?>, backgroundColor: "rgba(153,255,51,0.4)"

投稿2020/03/18 06:05

編集2020/03/18 06:09
nojimage

総合スコア959

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

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

susumu_0414

2020/03/18 06:40

回答ありがとうございます。 試しにjson_encodeを入れると変数が使用できました! でもなぜこれでJavascriptに変数を渡せるのか謎です。。。 少し勉強します。 予想はcakephp3ではviewを呼び出すときに変数の中身を展開してhtml内に配列の情報を持たせていると予想しています。。。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問