CakePHPでFormヘルパーのyearを使った時のPOST値がarrayで来た(・ ・`
CakeのFormヘルパーにあるyearメソッドを使って、mogemogeデータベースにあるhogeテーブル内のintフィールドhoge_date_yに年を登録してみます。
app/View/hoge/index.ctp
<?php echo $this->Form->create(‘Hoge’, array(‘type’=>’post’,’action’=>’./addRecord’, ‘inputDefaults’=>array( ‘label’=>false, ‘type’=>’text’, ‘div’=>false))); ?>
<?php echo $this->Form->year(‘hoge_date_y’, (date(‘Y’) -1), (date(‘Y’) +1), array(‘empty’=>’-‘, ‘orderYear’=>’desc’, ‘value’=>date(‘Y’))); ?>年
<?php echo $this->Form->end(‘ほげ年登録’); ?>
<?php echo $this->Form->year(‘hoge_date_y’, (date(‘Y’) -1), (date(‘Y’) +1), array(‘empty’=>’-‘, ‘orderYear’=>’desc’, ‘value’=>date(‘Y’))); ?>年
<?php echo $this->Form->end(‘ほげ年登録’); ?>
app/Controller/HogesController.php
public function addRecord(){
if (!empty($this->request->data)) {
if ($this->Hoge->save($this->request->data)) {
$this->redirect(array(‘action’ => ‘hogelist’));
}
}
}
if (!empty($this->request->data)) {
if ($this->Hoge->save($this->request->data)) {
$this->redirect(array(‘action’ => ‘hogelist’));
}
}
}
んで実行してみます。
Database Error
Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘Array’ in ‘field list’
Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘Array’ in ‘field list’
あり? (・ω・`
なんか配列が来てますね。
ではPOSTされたデータを見てみます。
app/Controller/HogesController.phpのアクションaddRecordを変更
public function addRecord(){
if (!empty($this->request->data)) {
$this ->autoRender = false;
var_dump($this->request->data);
/*
if ($this->Hoge->save($this->request->data)) {
$this->redirect(array(‘action’ => ‘hogelist’));
}
*/
}
}
if (!empty($this->request->data)) {
$this ->autoRender = false;
var_dump($this->request->data);
/*
if ($this->Hoge->save($this->request->data)) {
$this->redirect(array(‘action’ => ‘hogelist’));
}
*/
}
}
結果
array(1) { ‘Hoge’ => array(1) { ‘hoge_date_y’ => array(1) { ‘year’ => string(4) “2012” }}}
なんぞこれw
なんか勝手にyearというキーで連想配列化されてますw
とりあえずぐぐってみましたが仕様?のようです。配列化を無効にするオプション等も見つかりません。
ちなみに
$this->Form->month()
$this->Form->day()
$this->Form->input(‘hoge_date_y’,array(‘type’=>’date’, ‘dateFormat’=>’Y’))
$this->Form->day()
$this->Form->input(‘hoge_date_y’,array(‘type’=>’date’, ‘dateFormat’=>’Y’))
でも同じような現象が起こるようです。
仕方ないのでとりあえずアクション内に配列から値を取って直入れする処理を書きます。
app/Controller/HogesController.php
public function addRecord(){
if (!empty($this->request->data)) {
$this->request->data[‘Hoge’][‘hoge_date_y’] = $this->request->data[‘Hoge’][‘hoge_date_y’][‘year’];
if ($this->Hoge->save($this->request->data)) {
$this->redirect(array(‘action’ => ‘hogelist’));
}
}
}
if (!empty($this->request->data)) {
$this->request->data[‘Hoge’][‘hoge_date_y’] = $this->request->data[‘Hoge’][‘hoge_date_y’][‘year’];
if ($this->Hoge->save($this->request->data)) {
$this->redirect(array(‘action’ => ‘hogelist’));
}
}
}
これでエラーは消えて登録できるようになりましたが・・・うーん(^^;
WEB+DB PRESS Vol.74
posted with amazlet at 13.06.24
井上 誠一郎 奥野 幹也 田中 慎司 西嶋 悠貴 伊藤 直也 登尾 徳誠 天野 祐介 後藤 秀宣 ヒノケン 近藤 宇智朗 近藤 嘉雪 渡邊 恵太 堤 智代 中島 聡 A-Listers はまちや2 川添 貴生
技術評論社
売り上げランキング: 2,008
技術評論社
売り上げランキング: 2,008
コメントを残す