2013-02-27 66 views
4

我有一个表单,用户在其中选择一个文档。然后,该文档由控制器保存到webroot文件夹中。在CakePHP中创建一个与模型无关的表单

然而,它甚至可以显示表单之前,它给了我一个错误:

Missing Database Table 
Error: Table office_layouts for model OfficeLayout was not found in datasource default. 

哪个是正确的,对于office_layouts没有数据库表。但它不是必需的。这就是为什么没有桌子。表单只是上传到服务器。

我已经通过创建表单读取,并且已经尝试了以下内容:

// file: View/OfficeLayout/upload.ctp 
echo $this->Form->create(null ,array('type' => 'file')); ?> 
<fieldset> 
    <legend><?php echo __('&emsp;Add Layout for ' . $branch); ?></legend> 
    <?php 
     echo $this->Form->input('layout',array('type'=>'file')); 
    ?> 
</fieldset> 
<?php echo $this->Form->end(__('Submit')); ?> 

除了chaning的null到控制器的名称(在此情况下OfficeLayout)。我也已删除所有参数(thus creating it like so: $this->Form->create()

在我的控制器我有以下几点:

public function upload($branch = null) { 
    $this->set('branch',$branch); 
    if(isset($this->request->data['OfficeLayout'])) { 
     $file = $this->request->data['OfficeLayout']['layout']; 
     if($file['error'] === UPLOAD_ERR_OK && move_uploaded_file($file['tmp_name'],APP . 'docs' . DS . 'layouts' . DS . $branch . '.pdf')) { 
      $this->Session->setFlash('New layout successfully uploaded.','default',array('class'=>'notification')); 
      $this->redirect(array('action'=>$branch)); 
     } else { 
      $this->Session->setFlash('Error uploading layout. Please contact web admin.','default',array('class'=>'error')); 
     } 
    } 
} 

这个动作获取的调用:domain/office_layouts/upload/branch

每当我删除$this->Form->create()行时,它显示上传视图,但显然不提交。

所以我在这种情况下的问题是,我怎么能创建一个窗体,没有它在数据库中查找表?

回答

12

相反null的,使用false

echo $this->Form->create(false, array('type' => 'file')); ?> 
+0

啊,太棒了! :d – Albert 2013-03-01 12:56:40

0

通过创建一个模型文件,只是把这个在那里固定它:

class OfficeLayout extends AppModel { 
    var $useTable = false; 
} 
+0

没有必要创建一个空的模型。创建表单时只需使用false。更简单:)我添加了一个答案。 – Alvaro 2013-03-01 12:37:18

相关问题