dousi0144
2016-02-04 07:07
浏览 18
已采纳

cakephp 3表单,文件类型不保存数据库中的图像数据

I am trying to upload image using cakephp 3. I tried it in cake 2.x, it worked fine there but not in cake 3.0. My image is uploaded but it is not getting saved in DB.

view

<div class="col-lg-8">
<div class="articles form large-9 medium-8 columns content">
    <?= $this->Form->create($article,['type' => 'file']) ?>
    <fieldset>
        <legend><?= __('Add Article') ?></legend>
        <?php
        echo $this->Form->input('title', [ "class" => "form-control"]);

        echo $this->Form->input('body', [ "class" => "form-control"]);

        echo $this->Form->file('image',[ "class" => "form-control"]);
        ?>
    </fieldset>
    <?= $this->Form->button(__('Submit'), ["class" => "btn btn-primary"]) ?>
    <?= $this->Form->end() ?>
</div>

Controller

public function add() {
    $article = $this->Articles->newEntity();
    if ($this->request->is('post')) {
        $filepath = getcwd() . '/uploads/' . $this->request->data['image']['name'];
        $filename = $this->request->data['image']['name'];
        $article = $this->Articles->patchEntity($article, $this->request->data);
        if ($this->Articles->save($article)) {                
            move_uploaded_file($this->request->data['image']['tmp_name'], $filepath);
            $this->Flash->success(__('The article has been saved.'));
            return $this->redirect(['action' => 'index']);
        } else {
            $this->Flash->error(__('The article could not be saved. Please, try again.'));
        }
    }
    $this->set(compact('article'));
    $this->set('_serialize', ['article']);
}

Model

namespace App\Model\Table;

use App\Model\Entity\Article;
use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Table;
use Cake\Validation\Validator;

class ArticlesTable extends Table {
public function initialize(array $config) { parent::initialize($config);

    $this->table('articles');
    $this->displayField('title');
    $this->primaryKey('id');

    $this->addBehavior('Timestamp');

    $this->hasMany('Comments', [
        'foreignKey' => 'article_id'

    ]);
}


public function validationDefault(Validator $validator)
{
    $validator
        ->add('id', 'valid', ['rule' => 'numeric'])
        ->allowEmpty('id', 'create');

    $validator
        ->allowEmpty('title');

    $validator
        ->allowEmpty('body');

    $validator
        ->add('image', [
                    'fileSize' => [
                            'rule' => [
                                'fileSize', '<', '5MB'
                            ],
                            'message' => 'Please upload file smaller than 5MB'
                        ],
                    'mimeType' => [
                        'rule' => [
                            'mimeType', ['image/jpeg','image/png','image/jpg']
                        ],
                        'message' => 'Please upload only png images'
                    ]
                ]
        )
        ->requirePresence('image', 'create')
        ->notEmpty('image');
    return $validator;
}

}

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dtcaw02086 2016-02-06 08:26
    已采纳

    I have found a solution myself but I am not sure whether it is the right way. But by doing this my problem has been solved.

    public function add() {
        $article = $this->Articles->newEntity();
        if ($this->request->is('post')) {
            $imageName = $this->request->data['image']['name'];
            $filepath = getcwd() . '/uploads/' . $imageName;
            $article = $this->Articles->patchEntity($article, $this->request->data);
            $article->image =  $imageName ;
    
            if ($this->Articles->save($article)) {                
                move_uploaded_file($this->request->data['image']['tmp_name'], $filepath);
                chmod($filepath, 0777);
                $this->Flash->success(__('The article has been saved.'));
                return $this->redirect(['action' => 'index']);
            } else {
                $this->Flash->error(__('The article could not be saved. Please, try again.'));
            }
        }
        $this->set(compact('article'));
        $this->set('_serialize', ['article']);
    }
    
    已采纳该答案
    打赏 评论

相关推荐 更多相似问题