cake-uploader - saveAssociated

时间:2012-09-25 13:42:57

标签: cakephp cakephp-2.2

我正在尝试在包含多个附件的模型(问题)中使用saveAssociated方法。

class Attachment extends AppModel {
    public $belongsTo = array(
        'Question' => array(
            'className' => 'Question',
            'foreignKey' => 'question_id',
        ),
    );

class Question extends AppModel {
public $hasMany = array(
    'Attachment' => array(
        'className' => 'Attachment',
        'foreignKey' => 'foreign_key',
        'dependent' => false,
        'conditions' => array('Attachment.model' => 'Question'),
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'exclusive' => '',
        'finderQuery' => '',
        'counterQuery' => ''
        )
    );

模型附件$ actsAs AttachmentBehavior(来自Cake-uploader Plugin

class Attachment extends AppModel {
...
    public $actsAs = array(
        'Uploader.FileValidation' => array(
            'file' => array(
                'extension' => array(
                    'value' => array('gif', 'jpg', 'jpeg'),
                    'error' => 'Only gif, jpg and jpeg images are allowed!'
                ),
                'required' => true
            ),
            'import' => array('required' => true),
            'file' => array('required' => true),
        ),
        'Uploader.Attachment' => array(
            'file' => array(
                'name' => 'uploaderFilename',
                'baseDir' => '/******',
                'uploadDir' => '/****/',
                'dbColumn' => 'real_name',
                'maxNameLength' => 30,
                'overwrite' => true,
                'stopSave' => false,
                'transforms' => ''
            )
        )
    );

当我尝试添加带附件的问题时,信息会保存在数据库中,但文件不会上传到预期的文件夹中:

    public function add() {
        if (!empty($this->request->data) && $this->request->is('post')) {

            App::import('Vendor', 'Uploader.Uploader');

            $this->Mensagen->create();
            $this->request->data['Anexo'][0]['model'] = $this->modelClass;

            debug($this->request->data);

            if ($this->Mensagen->saveAll($this->request->data)) {
                $this->Session->setFlash(__('Success'));
            } else {
                $this->Session->setFlash(__('Try again.'));
            }
    }

我已经:

  1. 尝试使用saveAssociated,结果是一样的;
  2. 使用附件模型的行为测试(随附插件附带)成功上传文件;
  3. 成功保存了另一个属于问题的模型
  4. saveAssociated和saveAll是否应该考虑插件实现的行为?

    与此相关的其他问题是我在表附件中插入了两个注册表。一个填写了字段名称,另一个填写了字段模型。

    最后一个问题正在发生,因为没有考虑到这种行为。使用bahaviours测试只保存一个注册表。

    array(
        'Question' => array(
            'state_id' => '1',
            'from_id' => '2',
            'grup_id' => '1',
            'action' => 'add',
            'question' => 'test file 2'
        ),
        'Attachment' => array(
            'file' => array(
                'name' => 'foto0001.jpg',
                'type' => 'image/jpeg',
                'tmp_name' => '/tmp/phpPuVx3P',
                'error' => (int) 0,
                'size' => (int) 140773
            ),
            'model' => 'Question'
        )
    )
    

1 个答案:

答案 0 :(得分:1)

您是否检查了以下内容:

  1. 确保basedir和attachement目录存在于预期的位置?
  2. 检查目录的权限以确保您的应用具有 是否允许在那里写作?
  3. 过去,这些都与我“陷入困境”。