CakePHP表单提交"数组"

时间:2014-11-16 11:27:36

标签: mysql cakephp cakephp-2.0

我正在尝试创建一个表单" Movie"如下所示,我的数据库接受movie_id,标题,年份和描述。当我运行代码时,它会尝试存储"数组"作为年份输入。这是我得到的错误=> movie_id,title,year,description)VALUES(NULL,' Movie1',Array,' some text')

观点:

 <?php 
   echo $this->Form->create('Movie'); ?>
    <?php echo __('Add Movie'); ?>

      <?php
          echo $this->Form->hidden('movie_id');
          echo $this->Form->input('title');
          echo $this->Form->input('year', array(
             'type'=>'date',
             'dateFormat'=>'Y',
             'minYear'=>'1990',
             'maxYear'=>date('Y'),
         ));
          echo $this->Form->input('description');

        ?>

 <?php echo $this->Form->end(__('Submit')); 

?> 

控制器:

public function add() {

if ($this->request->is('post')) {

    $this->Movie->create();

      if ($this->Movie->save($this->request->data)) {
        $this->Session->setFlash(__('The movie has been created'));
        $this->redirect (array('action'=>'index'));
  } 

  else {

    $this->Session->setFlash(__('The movie could not be created. Please, try again.'));

  }
}
}

2 个答案:

答案 0 :(得分:0)

最好的办法是调试你的$ this-&gt; request-&gt;数据。

我不确定自己,但我曾经遇到过这个问题。发生的事情是,当您将输入定义为日期时,它将表现为数组。 它将变为$this->request->data['Movie']['year']['year'];

您可以通过执行以下操作来修改数据

$this->request->data['Movie']['year'] = $this->request->data['Movie']['year']['year'];

答案 1 :(得分:0)

我相信你的问题在这里:

     $this->Form->input('year', array(
         'type'=>'date',
         'dateFormat'=>'Y',
         'minYear'=>'1990',
         'maxYear'=>date('Y'),
     ));

而不是它应该使用

     $this->Form->input('Movie.year', array(
         'type'=>'text',
         'name' => 'data[Movie][year]',
     ));

如果您不想使用'text'类型输入,请在您的options数组中使用'select'。这里主要关注的是Movie.year并将默认的CakePHP命名过程覆盖到'name' => 'data[Movie][year]'。检查 here