cakePHP 3.0 fotoğraf yükleniyor

Cakephp 3.0 uygulamamdaki görüntüleri yüklemek istiyorum. Ancak hata mesajını alıyorum:

Notice (8): Undefined index: Images [APP/Controller/ImagesController.php, line 55]

CakePHP 3.0'da dosya yüklemek için bazı örnekler var mı (bir kerede birden fazla dosya)? Çünkü sadece cakePHP 2.x için örnekler bulabiliyorum!

ImagesTable.php dosyasına özel bir doğrulama yöntemi eklemem gerektiğini düşünüyorum? Ama çalışmasını sağlayamıyorum.

ImagesTable

public function initialize(array $config) {
    $validator
       ->requirePresence('image_path', 'create')
       ->notEmpty('image_path')
       ->add('processImageUpload', 'custom', [
          'rule' => 'processImageUpload'
       ])
}

public function processImageUpload($check = array()) {
    if(!is_uploaded_file($check['image_path']['tmp_name'])){
       return FALSE;
    }
    if (!move_uploaded_file($check['image_path']['tmp_name'], WWW_ROOT . 'img' . DS . 'images' . DS . $check['image_path']['name'])){
        return FALSE;
    }
    $this->data[$this->alias]['image_path'] = 'images' . DS . $check['image_path']['name'];
    return TRUE;
}

ImagesController

public function add()
    {
        $image = $this->Images->newEntity();
        if ($this->request->is('post')) {
            $image = $this->Images->patchEntity($image, $this->request->data);

            $data = $this->request->data['Images'];
            //var_dump($this->request->data);
            if(!$data['image_path']['name']){
                unset($data['image_path']);
            }

           //var_dump($this->request->data);
            if ($this->Images->save($image)) {
                $this->Flash->success('The image has been saved.');
                return $this->redirect(['action' => 'index']);
            } else {
                $this->Flash->error('The image could not be saved. Please, try again.');
            }
        }
        $images = $this->Images->Images->find('list', ['limit' => 200]);
        $projects = $this->Images->Projects->find('list', ['limit' => 200]);
        $this->set(compact('image', 'images', 'projects'));
        $this->set('_serialize', ['image']);
    }

Resim add.ctp

<?php
   echo $this->Form->input('image_path', [
      'label' => 'Image',
      'type' => 'file'
      ]
   );
?>

Resim Varlığı

protected $_accessible = [
    'image_path' => true,
];
9

6 cevap

In your view file, add like this, in my case Users/dashboard.ctp

<div class="ChImg">
<?php 
echo $this->Form->create($particularRecord, ['enctype' => 'multipart/form-data']);
echo $this->Form->input('upload', ['type' => 'file']);
echo $this->Form->button('Update Details', ['class' => 'btn btn-lg btn-success1 btn-block padding-t-b-15']);
echo $this->Form->end();       
?>
</div>

In your controller add like this, In my case UsersController

if (!empty($this->request->data)) {
if (!empty($this->request->data['upload']['name'])) {
$file = $this->request->data['upload']; //put the data into a var for easy use

$ext = substr(strtolower(strrchr($file['name'], '.')), 1); //get the extension
$arr_ext = array('jpg', 'jpeg', 'gif'); //set allowed extensions
$setNewFileName = time() . "_" . rand(000000, 999999);

//only process if the extension is valid
if (in_array($ext, $arr_ext)) {
    //do the actual uploading of the file. First arg is the tmp name, second arg is 
    //where we are putting it
    move_uploaded_file($file['tmp_name'], WWW_ROOT . '/upload/avatar/' . $setNewFileName . '.' . $ext);

    //prepare the filename for database entry 
    $imageFileName = $setNewFileName . '.' . $ext;
    }
}

$getFormvalue = $this->Users->patchEntity($particularRecord, $this->request->data);

if (!empty($this->request->data['upload']['name'])) {
            $getFormvalue->avatar = $imageFileName;
}


if ($this->Users->save($getFormvalue)) {
   $this->Flash->success('Your profile has been sucessfully updated.');
   return $this->redirect(['controller' => 'Users', 'action' => 'dashboard']);
   } else {
   $this->Flash->error('Records not be saved. Please, try again.');
   }
}

Bunu kullanmadan önce, webroot 'da upload/avatar adlı bir klasör oluşturun.

Not: Giriş ('Burada Adı'),

$this->request->data['upload']['name']

dizi sonucunu görmek istiyorsanız yazdırabilirsiniz.

Its works like a charm in CakePHP 3.x

10
katma
$ this-> request-> data, "data" biçiminde "ex" için sütun adında olduğu gibi geri dönmeli, tablo adındaki e-postanın e-posta metin kutusunda olması gerekir. Gerisi aynı şekilde çalışır. Değişiklik gerekli değil.
katma yazar Prassanna D Manikandan, kaynak
@ IdhamChoudry Klasör, belirttiğiniz yerde bulunmuyor veya klasör izinlerine sahip olmayabilir.
katma yazar Prassanna D Manikandan, kaynak
Dostum Kodunu denedim ve resim yükleme çok iyi sonuç verdi. Ancak mesele şu ki, başka hiçbir saha verisi kaydedilmiyor. Neden bu kadar ?? Uygun tasarruf sağlamak için herhangi bir değişiklik yapmam gerekir mi?
katma yazar Deepak Jain, kaynak
@PrassannaD akışı açamadı: Böyle bir dosya veya dizin yok move_uploaded_file() [ function.move-uploaded-file ] "rel =" nofollow noreferrer "> php.net/… : Taşınamıyor
katma yazar Idham Choudry, kaynak

Belki aşağıdakiler yardımcı olabilir. Dosyaları kolayca yüklemenize yardımcı olan bir davranış!

http://cakemanager.org/docs/utils/1.0/behaviors/uploadable/

Eğer mücadele edersen bana haber ver.

Selamlamak

4
katma
Bağlantı koptu.
katma yazar Adam C., kaynak
Lütfen gitter.im/bobmulder aracılığıyla iletişim kurun ve bazı kodları paylaşın ....
katma yazar Bob, kaynak
Hey dostum lütfen yardım et. Yukarıdakileri yükledim, tam olarak dokümanlardakileri yazdım, ancak dosya yüklemek veya dosya adlarını DB'ye depolamak değil. Herhangi bir fikir?
katma yazar Deej, kaynak
@SyamsoulAzrien yeni bir soru sormalısın :-)
katma yazar Spriz, kaynak

Şimdi herkes buradaki eklentileri için reklam yaptığında, bunu da yapmama izin verin. Diğer soruya bağlı olan İndirilebilir davranışı kontrol ettim, oldukça basit ve yarısı göründüğü gibi.

Kurumsal düzeyde ölçeklendirmek için yapılmış eksiksiz bir çözüm istiyorsanız FileStorage dışarı. Diğer uygulamalarda henüz görmediğim bazı özelliklere sahip, ancak birçok dosya gerçekten olması durumunda dosya sistemi sınırlamalarına maruz kalmamaya dikkat etmek gibi. Görüntüleri işlemek için Hayal edin ile birlikte çalışır. Her birini tek başına veya kombinasyon halinde kullanabilirsiniz, bu SoC 'u izler.

Tamamen olaya dayanıyor, kendi olay dinleyicilerinizi uygulayarak her şeyi değiştirebilirsiniz. CakePHP ile orta düzeyde bir deneyim gerektirir.

Bir hızlı başlangıç ​​kılavuzu Uygulamanın ne kadar kolay olduğunu görmek için. Aşağıdaki kod ondan alınmıştır, bu tam bir örnek, lütfen hızlı başlangıç ​​kılavuzuna bakın, daha ayrıntılı.

class Products extends Table {
    public function initialize() {
        parent::initialize();
        $this->hasMany('Images', [
            'className' => 'ProductImages',
            'foreignKey' => 'foreign_key',
            'conditions' => [
                'Documents.model' => 'ProductImage'
            ]
        ]);
        $this->hasMany('Documents', [
            'className' => 'FileStorage.FileStorage',
            'foreignKey' => 'foreign_key',
            'conditions' => [
                'Documents.model' => 'ProductDocument'
            ]
        ]);
    }
}

class ProductsController extends ApController {
   //Upload an image
    public function upload($productId = null) {
        if (!$this->request->is('get')) {
            if ($this->Products->Images->upload($productId, $this->request->data)) {
                $this->Session->set(__('Upload successful!');
            }
        }
    }
}

class ProductImagesTable extends ImageStorageTable {
    public function uploadImage($productId, $data) {
        $data['adapter'] = 'Local';
        $data['model'] = 'ProductImage',
        $data['foreign_key'] = $productId;
        $entity = $this->newEntity($data);
        return $this->save($data);
    }
    public function uploadDocument($productId, $data) {
        $data['adapter'] = 'Local';
        $data['model'] = 'ProductDocument',
        $data['foreign_key'] = $productId;
        $entity = $this->newEntity($data);
        return $this->save($data);
    }
}
0
katma
/*Path to Images folder*/
$dir = WWW_ROOT . 'img' .DS. 'thumbnail';
/*Explode the name and ext*/
                $f = explode('.',$data['image']['name']);
                 $ext = '.'.end($f);
    /*Generate a Name in my case i use ID  & slug*/
                $filename = strtolower($id."-".$slug);

     /*Associate the name to the extension  */
                $image = $filename.$ext;


/*Initialize you object and update you table in my case videos*/
                $Videos->image = $image;     
            if ($this->Videos->save($Videos)) {
/*Save image in the thumbnail folders and replace if exist */
            move_uploaded_file($data['image']['tmp_name'],$dir.DS.$filename.'_o'.$ext);

            unlink($dir.DS.$filename.'_o'.$ext);
                } 
0
katma

Büyük bir başarı ile https://github.com/josegonzalez/cakephp-upload adresini kullanıyoruz bizim üretim uygulaması ve oldukça bir süredir böyle yaptı.

"Flysystem" ( https://flysystem.thephpleague.com/ ) 'i kullanma konusunda da müthiş destek var - belirli dosya sistemlerinden soyutlamadır - normal yerel dosya sisteminden S3’e geçiş yapmak hiç akıllıca ya da bir Dropbox ya da istediğiniz herhangi bir yerde :-)

İlgili (yüksek kaliteli) eklentileri burada dosya yüklerken bulabilirsiniz: https://github.com/ FriendsOfCake/awesome-cakephp # files - "Proffer" ı da başarılı bir şekilde kullandım ve hiçbir şekilde "neredeyse bitti" ya da benzer bir şey kullanmıyorum - ikisi de benim tüm önerilerime sahip ve gözlerimde hazır!

0
katma
<?php
namespace App\Controller\Component;

use Cake\Controller\Component;
use Cake\Controller\ComponentRegistry;
use Cake\Network\Exception\InternalErrorException;
use Cake\Utility\Text;

/**
 * Upload component
 */
class UploadRegCompanyComponent extends Component
{

    public $max_files = 1;


    public function send( $data )
    {
        if ( !empty( $data ) ) 
        {
            if ( count( $data ) > $this->max_files ) 
            {
                throw new InternalErrorException("Error Processing Request. Max number files accepted is {$this->max_files}", 1);
            }

            foreach ($data as $file) 
            {
                $filename = $file['name'];
                $file_tmp_name = $file['tmp_name'];
                $dir = WWW_ROOT.'img'.DS.'uploads/reg_companies';
                $allowed = array('png', 'jpg', 'jpeg');
                if ( !in_array( substr( strrchr( $filename , '.') , 1 ) , $allowed) ) 
                {
                    throw new InternalErrorException("Error Processing Request.", 1);       
                }
                elseif( is_uploaded_file( $file_tmp_name ) )
                {
                    move_uploaded_file($file_tmp_name, $dir.DS.Text::uuid().'-'.$filename);
                }
            }
        }
    }
}
0
katma