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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

10286閲覧

別画面で表示すると真っ白になってしまう

k499778

総合スコア599

CakePHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2016/04/11 14:11

前回の投稿の続きです。
画面の要素をコピーして別画面に表示したい

現在cakePHP3,PHP,HTML(ctp),JavaScript(jQuery)を使ってアプリ開発をしています。
前回の投稿にもある通り、「表示画面の内容を別画面で表示したい」と思っています。

しかしその実装中に不可解な現象が発生しました。

別画面側のctpファイルで、<a>タグをPOST送信するために

HTML

1<a href="javascript:document.frm1.submit()"> 2 <form name="frm1" method="POST" action="http://localhost/cakephp3/Sample/tomato"> 3 <input type="hidden" name="id" value="1234"> 4 </form> 5 ”とまと” 6</a>

のようなコードを書いたのですが、そうすると別画面を表示した時に画面が真っ白になってしまったのです。

ただこのコードの

HTML

1<form name="frm1" method="POST" action="http://localhost/cakephp3/Sample/tomato"> 2 <input type="hidden" name="id" value="1234"> 3 </form>

部分をコメントアウトすると、通常通り表示されます。

なぜでしょうか?
POST送信できるコードを使ったまま、別画面にしても真っ白にならない方法を知りたいです。

こういった経験のある方、また改善策がわかる方がいらっしゃれば教えていただけると助かります。
よろしくお願い致します。

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

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

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

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

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

CHERRY

2016/04/11 23:15 編集

Web サーバーのエラーログに 何かエラーメッセージが出力されていないでしょうか?
k499778

2016/04/11 23:29 編集

それがエラーメッセージが出てないんです。 リンクから別画面を表示した時は真っ白なんですが、 そこでF5(画面更新)すると画面が表示されるんです。 なんだか画面遷移が最後まで(ページの表示まで)行かず、途中で止まっているような感じもします。
guest

回答2

0

formタグをaタグの中に記述しているのはなぜでしょうか?
下記のようにaタグの外にformタグを出すとどうでしょう?

HTML

1<form name="frm1" method="POST" action="http://localhost/cakephp3/Sample/tomato"> 2 <input type="hidden" name="id" value="1234"> 3</form> 4<a href="javascript:document.frm1.submit()"> 5 ”とまと” 6</a>

投稿2016/04/13 12:45

megumiro

総合スコア18

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

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

k499778

2016/04/13 14:35

回答有り難うございます。 私もそう思ってaタグの位置を変えたりしたのですがうまくいきませんでした。 ただなんとか解決に至りました。 呼出元画面でパラメータとして渡していたHTMLコンテンツがどうも悪さしていたらしく、 それを飛ばさないようにすると画面表示することができました。 ただtkowさんの返信にも書いたように、どうも辻褄があわない事が多く、モヤッとした解決になってしまいました。 とは言っても、とりあえず前に進むことができたので良しとします。 ご協力ありがとうございました。
guest

0

ベストアンサー

まずブラウザのコンソール(例:chrome)でこのページを開いて記述したdomがhtmlにちゃんと出力されているか確認してみて下さい。
もし,出力されていないのであれば,サーバ側のコードにエラーがあり,実行が止まっています。
もし,domが存在しているのに出力されていない場合はhiddenやaタグやスタイルシートの影響を受けている可能性があるのでDOMを分離したり少しずつ書き方を変えてみて下さい。
それ以上根が深いバグがある可能性もない訳ではないですが,経験上何処かに文法ミスがある可能性が高い気がします。(特にctp)
また,それでも原因が解らないようでしたらvar_dumpやdebug_trace,IDE環境がありましたらXDEBUGデバッグ用のツールを用いてコードの逐次実行を行ってみるといいと思います。

追記

ちなみに

html

1<form name="frm1" method="POST" action="http://localhost/cakephp3/Sample/tomato"> 2 <input type="hidden" name="id" value="1234"> 3 </form>

だけで実行するとどうなるか試してもらえないでしょうか。

投稿2016/04/12 01:03

編集2016/04/12 04:07
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

k499778

2016/04/12 03:17 編集

回答ありがとうございます。 現状として、 「デベロッパーツール」で見ると、Elementに 白紙の内容のDOMが表示されており、 「ソースを表示する」で見てみると、 ちゃんとDOMが表示されているのです。 そういったところもよくわかんないです。
退会済みユーザー

退会済みユーザー

2016/04/12 03:58 編集

Element側が白紙になってるということは,出力されていないということですね。 ソースを表示するでは,テンプレートエンジンの出力またはhtmlファイルに記述されているファイルがそのまま表示されていると思います。 ctpではなくhtmlをそのまま出力しているのでしたっけ? デパロッパーツールでは一時的に出力にDOM要素を追加できるので,DOMをコピペしてedit as htmlなどを用いて無理やり追加してみるといいと思います。もし,それで,DOMが正常に読み込まれ,画面上にUIが追加されるのであれば,PHP側でバグが起きている可能性があります。
k499778

2016/04/12 12:12

tkowさん、返答誠にありがとうございます。 htmlではなく、ctpを呼び出してみます。出力しています。 edit as htmlでDOMを一時的に追加できるのですね。 デベロッパーツールのコンソールに書くのでしょうか? 調べてみます。
退会済みユーザー

退会済みユーザー

2016/04/12 13:10 編集

elementウインドウで挿入したい場所のDOMを右クリックするとedit as htmlという項目が出てくると思います。 そこにタグをコピペすれば挿入されると思います。 また追加情報でf5更新が効いていると拝見させていただいての予測ですがcakeを使ってるとのことでlink先でコントローラーのアクションをリクエストした後リダイレクトやviewのレンダリングをされていないのではないでしょうか。よくあるのはボタンがpost送信で実行した後の処理を忘れるなどがあります。リロードはGETで送信されるのでhtmlが出力されるのではないかと予想します。この辺りを確認お願いいたします。
k499778

2016/04/13 00:45 編集

追加返答ありがとうございます。 edit as htmlで「ソースを表示する」で表示できたタグ、つまり表示したいタグを追加すると、画面上にUIが表示されました。 表示画面のformタグ部分を除くと、表示画面は表示されるので、 遷移元画面(ctp)→コントローラー(php)→表示画面(ctp) の流れは問題ないんじゃないかな。と思ってはいますが、検証してみます。
退会済みユーザー

退会済みユーザー

2016/04/13 02:11 編集

なるほど。 リンク先のコードも見させていただきました。 set関数を使った後,renderあるいはredirectでviewを呼び出していないのが気になっています。 私はcakeも使ったことがありますが,主にrails開発メインなので大体同じ仕様になっていると思うという前提で,経験上の話をいたしますが,パラメータを保持したままMVCで画面を再描画する方法は,送信されたパラメータとともにrenderでviewファイルを渡す。同じURLでcookieなどにパラメータを入れてredirectさせてパラメータを渡す。ajaxでレスポンスにデータと再描画を行うコードを返す。 というのが常套手段になります。 DOMを一部削除するとrenderingされるのは少し不可解ですが,やはりpost先のアクション実行後のルーティングに問題がある可能性が高い気がするので,renderやredirectを使った方法に切り替える方が簡単に済む気がします。 もしかするとcakeのルーティングの規約の問題やルーティングの設定ミスなどもあるかもしません。これらを試しても直らなければ私には手に負えない問題かもしれないので他の解る方が現れるのをお待ちいただければと思います。 DOMを手動で挿入できることからcake側に問題があることは間違いありません。
k499778

2016/04/13 03:24 編集

丁寧な対応ありがとうございます。 レンダリングに関してだけ言うと、 cakephp3では、コントローラのアクション名と同じ名前のビューがレンダリングされます。(キャメルケースとスネークケースによる違いはありますが。) そのためレンダリングの仕方に関しては問題のないように思われます。 以下リンク「Viewのレンダリングと値のセット」参照 http://qiita.com/s-kiriki/items/636ec1109f48fb977347 その他の点に関しては、検証後また返答させていただきます。
退会済みユーザー

退会済みユーザー

2016/04/13 04:30

確かにactionとview同じ名前にされていますね。 また何か思いついたら書き込ませていただきます。
k499778

2016/04/13 14:31

tkowさん何度も丁寧に接していただきありがとうございます。 いろいろ対話している中で試行錯誤し、なんとか解決することができた模様です。 前回投稿で記述しているのですが、 呼出元画面でHTML文字列をパラメータに設定し、POST送信していました。 そのHTML文字列がどうも悪さをしていたようです。 パラメータとしてHTML文字列を飛ばさないようにすると、呼出先画面、いわゆる今回表示できなくて困っていた表示画面を表示することができました。 ただ前回のデバッグで、HTML文字列を飛ばさないようにして検証したり、 そもそもそれではなぜ表示画面のformタグがあるときとないときで表示されされないが変わるのかがよくわかりません。 リロードすると画面表示できたのは、一度目は見えないおかしなクエリパラメータのせいで表示できず、リロード時は隠れたパラメータ抜きにして、そのURLのみを読みこんだから表示されたのかなと推測を立てています。 いろいろとスッキリしない結果にはなってしまいましたが、tkowさんの協力もあって解決に至ることができました。 長々と付き合っていただきありがとうございました。
退会済みユーザー

退会済みユーザー

2016/04/13 15:01

なるほど。お疲れ様です。 cakeでCSRF対策が働いていたのかもしれませんね。 基本的にスクリプトやhtml文字列をサーバに送信する時はURLエンコーディングしたり,エスケープしたり,置換するものと思った方がいいと思います。 フレームワーク使うとブラックボックス多くてエラーの原因の根が深くなって大変ですよね。 こちらも勉強になりました。ありがとう御座います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問