【问题标题】:CakePHP 3 : Image upload from controllerCakePHP 3:从控制器上传图像
【发布时间】:2016-03-23 16:05:42
【问题描述】:

我正在尝试使用 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.'));
                }
}

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

【问题讨论】:

  • 我认为您不希望数据中有 ['News'] 级别。查看$this-&gt;request-&gt;data 的内容并将您创建的字段与该格式匹配。

标签: cakephp cakephp-3.0 cakephp-3.1


【解决方案1】:

只有一个问题,

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

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

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

【讨论】:

    【解决方案2】:

    $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.'));
       } 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-25
      • 2010-12-16
      • 2011-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多