创建一个与cakePHP中的模型无关的表单

时间:2013-02-27 14:40:02

标签: php cakephp-2.0 cakephp-appmodel

我有一个用户选择文档的表单。然后,控制器将此文档保存到webroot文件夹中。

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

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')); ?>

以及将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()行时,它会显示上传视图,但显然不会提交。

所以我在这种情况下的问题是,如何在不在数据库中查找表的情况下创建表单?

2 个答案:

答案 0 :(得分:12)

而不是null,请使用false

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

答案 1 :(得分:0)

通过创建一个模型文件并将其放在那里来修复它:

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