我正在学习CakePHP 2.0,并创建了一个示例测试应用程序,用户可以在注册时提交文件。
下面是数据库表
id Auto_Increment
first_name
last_name
email
doc_file
还创建了User.php
和UsersController.php
及以下是UsersController.php
class UsersController extends AppController{
public $helpers = array('Html', 'Form');
public function index(){
$this->set('user1', $this->User->find('all'));
}
public function register(){
if ($this->request->is('post')){
if ($this->User->save($this->request->data)){
//move_uploaded_file($this->data['Model']['field']['tmp_name'], WWW_ROOT.DS.'xxx');
move_uploaded_file($this->data['User']['doc_file']['tmp_name'], WWW_ROOT.DS.'hello.doc');
$this->Session->setFlash('User is created');
$this->redirect(array('action'=>'index'));
} else {
$this->Session->setFlash('Cannot register a user');
}
}
}
}
在Views中,我在View目录中创建了两个文件,即index.ctp
和register.ctp
,目录为Users
代码内容register.ctp
<?php
echo $this->Form->create('User', array('type'=>'file'));
echo $this->Form->input('first_name', array('label'=>'First Name'));
echo $this->Form->input('last_name', array('label'=>'Last Name'));
echo $this->Form->input('email');
echo $this->Form->input('doc_file', array('type'=>'file'));
echo $this->Form->end('Register');
?>
当运行此页面并填写所有信息时,会出现错误
Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Array' in 'field list'
以下是我收到的查询,其中array
插入doc_file
SQL Query: INSERT INTO `database_db`.`users` (`first_name`, `last_name`, `email`, `doc_file`) VALUES ('master', 'shifu', 'shifu@k.com', Array)
我在尝试什么:
当用户正在注册时,文件名应该是随机的,应该移到
localhost/mysite/app/webroot/files/user_data/
或
localhost/mysite/app/webroot/files/user_data/user_id_directory/
如果它创建了userid目录并将文件存储在其父用户目录中
,那就很好了答案 0 :(得分:2)
问题在于CakePHP正在查看doc_file字段并尝试将其插入数据库。
在Cake处理表单提交后,doc_file包含一组值。
您可以通过执行以下操作来解决此问题:
在您看来:
echo $this->Form->input('new_doc_file', array('type'=>'file'));
在您的控制器中:
if ($this->request->is('post')){
$this->data['User']['doc_file'] = WWW_ROOT.DS.'hello.doc';
if ($this->User->save($this->request->data)){
move_uploaded_file($this->data['User']['new_doc_file']['tmp_name'], $this->data['User']['doc_file']);
$this->Session->setFlash('User is created');
$this->redirect(array('action'=>'index'));
} else {
$this->Session->setFlash('Cannot register a user');
}
}
(即使用临时字段名称上传文件,在尝试保存之前手动将doc_file字段添加到post数组中。)
答案 1 :(得分:0)
错误表明
$this->data['User']['doc_file']['tmp_name']
返回一个数组 - 试试
debug($this->data['User']['doc_file']['tmp_name'])
在您的控制器代码中查看它包含的内容。