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

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

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

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

CakePHP

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

Q&A

解決済

2回答

10661閲覧

CakePHPのフォームでArray to string conversionエラー

tuepon

総合スコア13

PHP

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

CakePHP

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

0グッド

0クリップ

投稿2016/10/08 08:36

###前提・実現したいこと
PHP(CakePHP)で入力確認画面付きお問合せフォームを作っています。
日付入力を実装中に以下のエラーメッセージが発生しました。

###発生している問題・エラーメッセージ
Notice (8): Array to string conversion [CORE\Cake\View\Helper\FormHelper.php, line 1709]

上記が出るものの、確認画面で日付は受け取って表示はされています。
しかし、テキストエリアの中に日付が表示されていて、編集ができる状態なのでヘンです。

###該当のソースコード
index.ctp

<?php echo $this->Form->input('date1', array( 'type' => 'date', 'dateFormat' => 'YMD', 'monthNames' => false, 'label' => '日付' )) . PHP_EOL; ?>

confirm.ctp

<?php echo $this->Form->create('Contact', array('action' => 'send')) . PHP_EOL; ?>

・・・・・・

日付:
<?php echo $this->Form->array('date1') . PHP_EOL; ?>
<?php echo $this->Form->hidden('date1'); ?>

###試したこと
日付:
<?php echo $this->Form->array('date1') . PHP_EOL; ?>
<?php echo $this->Form->hidden('Contact.date1', array('hiddenField' => true)); ?>

に変更したら、日付が送信されました。
しかしエラー表示は消えないままなので、直し方を知りたいです。
ご教示よろしくお願いいたします。

###補足情報(言語/FW/ツール等のバージョンなど)
CakePHP 2.7.9
PHP5.6.22

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

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

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

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

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

guest

回答2

0

ベストアンサー

FormHelperでtype=dateを使った場合、POSTデータは年月日が別れた配列になっており、それを一つのhiddenなinputで渡そうとしているのでエラーなっています。
var_dump($this->request->data);をやるとわかります。

なので、確認画面のコードを以下のようにするのがよさそうです

php

1<?php 2echo $this->Form->create('Contact', ['url' => 'send']); 3 4echo $this->Form->hidden('date1.year'); 5echo $this->Form->hidden('date1.month'); 6echo $this->Form->hidden('date1.day'); 7$date1 = $this->request->data['Contact']['date1']; 8echo $date1['year'] . "年" . $date1['month'] . "月" . $date1['day'] . "日"; 9 10echo $this->Form->submit(); 11echo $this->Form->end();

※hiddenなinputをyearとmonthとdayで分ける。
※確認用に表示する部分はForm->arrayではなく、$this->request->dataを見る。
※余談ですが、Form->createのactionは非推奨(Deprecated)らしいので、urlを使ったほうがよいかもです。

投稿2016/10/08 10:47

編集2016/10/08 11:13
popobot

総合スコア6586

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

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

tuepon

2016/10/08 11:41

ご教示ありがとうございます。手打ちでコード打って、正常に日付が表示されました。 質問の初投稿で、説明がうまく通じるか不安でしたが、くみ取っていただき感謝です。 $this->request->dataですね。CakePHP公式サイトも見て感じがつかめました。 actionのとこは、元にした教本が古かったので、urlを使うようにいたします。 今回の回答はすごく大きな理解が得られました。 本当にありがとうございました
popobot

2016/10/08 12:29

うまくいってよかったです! type='date'はちょっと変則的なのでわかりにくいですね。自分でもコードを動かさないと良くわからなかったです。 余談ですが、debug_kitは使っていますか?$request->dataなどのViewに渡った変数などが参照できてとても便利なのでぜひ使ってみてください。
tuepon

2016/10/09 02:44

お返事ありがとうございます。 debug_kit、早速導入しました。 これで自分で気づけると思います。
guest

0

php

1$this->Form->array('date1') 2```こんなメソッドありましたっけ?

投稿2016/10/08 08:42

shi_ue

総合スコア4437

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

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

popobot

2016/10/08 10:50

厳密にはありませんが、そのようなコードを実行すると以下のようなHTMLが出力されいます。結果的にブラウザが不明なtypeなので、2016 10 08を表示してくれるようです <input name="data[Contact][date1]" type="array" value="2016 10 08" id="ContactDate1">
tuepon

2016/10/08 11:14

このメソッドは存在しません。当てずっぽうで打ったコードを載せてしまい反省しております。データ構造から学ぶ必要があると痛感します
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問