2

我正在尝试使用 PHP 从控制器上传图像。此处图像上传工作正常,但内容未保存在数据库中,仅保存图像路径。如果我对图像上传代码发表评论,那么内容就会很好地添加到数据库中。

这是我尝试过的代码

    <?= $this->Form->create($news,array('type'=>'file')) ?>
             <div class="col-md-12">
                <?php
                    echo $this->Form->input('newsImage',['type'=>'file']);
                    echo $this->Form->input('title',['class'=>'form-control']);
                    echo $this->Form->input('news');
                ?>
            </div>
   <?= $this->Form->end() ?>

在控制器中,我尝试了以下代码来上传图片

 if ($this->request->is('post')) {

                $target_dir = "img/news/";
                $target_file = $target_dir . basename($_FILES["newsImage"]["name"]);

                $fNAME   = $_FILES["newsImage"]["name"];
                $TMPNAME = $_FILES['newsImage']['tmp_name'];

                move_uploaded_file($_FILES["newsImage"]["tmp_name"], $target_file);


                $this->request->data['News']['newsImage']=$fNAME;

                $news = $this->News->patchEntity($news, $this->request->data);
                if ($this->News->save($news)) {
                    $this->Flash->success(__('The news has been saved.'));
                    //return $this->redirect($this->referer()); 
                    return $this->redirect(['action' => 'index']);
                } else {
                    $this->Flash->error(__('The news could not be saved. Please, try again.'));
                }
}

这里只有图片目录保存在数据库中,标题和新闻不保存。

4

2 回答 2

1

只有一个问题,

$this->request->data['News']['newsImage']=$fNAME;

$this->request->data['newsImage']=$fNAME;

在 cakephp 3 中,您不需要定义模型名称。您可以使用浏览器检查器元素查看字段名称,然后匹配 cakephp-2 和 cakephp 3 表单,然后您可以看到更改。

于 2016-02-11T05:10:05.947 回答
0

$this->request->data['newsImage']=$fNAME;

在此之后添加此行

$news=$this->News->newEntity();

添加此代码后,您的控制器如下所示:

if ($this->request->is('post')) {
   $target_dir = "img/news/";
   $target_file = $target_dir . basename($_FILES["newsImage"]["name"]);

   $fNAME   = $_FILES["newsImage"]["name"];
   $TMPNAME = $_FILES['newsImage']['tmp_name'];

   move_uploaded_file($_FILES["newsImage"]["tmp_name"], $target_file);


   $this->request->data['newsImage']=$fNAME;

   $news=$this->News->newEntity();
   $news = $this->News->patchEntity($news, $this->request->data);
   if ($this->News->save($news)) {
       $this->Flash->success(__('The news has been saved.'));
       //return $this->redirect($this->referer()); 
       return $this->redirect(['action' => 'index']);
   } else {
        $this->Flash->error(__('The news could not be saved. Please, try again.'));
   } 
}
于 2015-12-20T18:44:53.170 回答