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 に答える