2016-08-18 12 views
0

私は画像をアップロードするためにCakephp 3.2とprofferプラグインを使用しています。cakephpイベントリスナーが見つかりません

/media/files/<tablename>/<primary_key>/<filename> 

新しい行が新しいフォルダは、その主キーで作成され、同じテーブルに挿入されるたびに、次のようにデフォルトでは、画像のパスがあります。

テーブルのすべての画像を同じディレクトリにアップロードします。パスを意味する

/media/files/<tablename>/<filename> 

私は、profferのドキュメントに記載されているとおり、イベントリスナーを使用しています。

これは私のSellersTable.php

<?php 
namespace App\Model\Table; 

use Cake\ORM\Query; 
use Cake\ORM\RulesChecker; 
use Cake\ORM\Table; 
use Cake\Validation\Validator; 
use Cake\Event\Event; 

class SellersTable extends Table 
{ 

    /** 
    * Initialize method 
    * 
    * @param array $config The configuration for the Table. 
    * @return void 
    */ 
    public function initialize(array $config) 
    { 
     parent::initialize($config); 

     $listener = new App\Event\UploadFileNameListener(); // line 23 
     $this->eventManager()->on($listener); 

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

     $this->addBehavior('Timestamp'); 
     $this->addBehavior('Proffer.Proffer', [ 
      'profile_picture' => [ 
       'root' => Configure::read('ArgoSystems.media.upload') . DS . 'files', 
       'dir' => 'dir' 
      ] 
     ]); 

    } 

    /** 
    * Default validation rules. 
    * 
    * @param \Cake\Validation\Validator $validator Validator instance. 
    * @return \Cake\Validation\Validator 
    */ 
    public function validationDefault(Validator $validator) 
    { 
     $validator 
      ->integer('id') 
      ->allowEmpty('id', 'create'); 

     $validator 
      ->requirePresence('first_name', 'create') 
      ->notEmpty('first_name'); 

     $validator 
      ->requirePresence('last_name', 'create') 
      ->notEmpty('last_name'); 

     $validator 
      ->email('email') 
      ->requirePresence('email', 'create') 
      ->notEmpty('email') 
      ->add('email', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']); 

     $validator->provider('proffer', 'Proffer\Model\Validation\ProfferRules'); 

     $validator 
      ->add('profile_picture', 'proffer', [ 
       'rule' => ['dimensions', [ 
       'min' => ['w' => 100, 'h' => 500], 
       'max' => ['w' => 100, 'h' => 500], 
       ]], 
       'message' => 'Image must be of 100 x 500 resolution', 
       'provider' => 'proffer' 
      ]) 
      ->requirePresence('profile_picture', 'create') 
      ->allowEmpty('profile_picture','update'); 

     $validator 
      ->requirePresence('password', 'create') 
      ->notEmpty('password'); 

     return $validator; 
    } 

    public function buildRules(RulesChecker $rules) 
    { 
     $rules->add($rules->isUnique(['email'])); 

     return $rules; 
    } 
} 

src/Event/

<?php 
namespace App\Event; 

use Cake\Event\Event; 
use Cake\Event\EventListenerInterface; 
use Cake\Utility\Inflector; 
use Proffer\Lib\ProfferPath; 

class UploadFileNameListener implements EventListenerInterface 
{ 
    public function implementedEvents() 
    { 
     return [ 
      'Proffer.afterPath' => 'change', 
     ]; 
    } 

    /** 
    * Rename a file and change it's upload folder before it's processed 
    * 
    * @param Event $event The event class with a subject of the entity 
    * @param ProfferPath $path 
    * @return ProfferPath $path 
    */ 
    public function change(Event $event, ProfferPath $path) 
    { 
     // Detect and select the right file extension 
     switch ($event->subject()->get('image')['type']) { 
      default: 
      case "image/jpeg": 
       $ext = '.jpg'; 
       break; 
      case "image/png": 
       $ext = '.png'; 
       break; 
      case "image/gif": 
       $ext = '.gif'; 
       break; 
     } 

     // Create a new filename using the id and the name of the entity 
     $newFilename = $event->subject()->get('id') . '_' . Inflector::slug($event->subject()->get('name')) . $ext; 

     // set seed 
     $path->setSeed('profile_picture'); 

     // Change the filename in both the path to be saved, and in the entity data for saving to the db 
     $path->setFilename($newFilename); 
     $event->subject('image')['name'] = $newFilename; 

     // Must return the modified path instance, so that things are saved in the right place 
     return $path; 
    } 
} 

しかし、これは

Error: Uncaught Error: Class 'App\Model\Table\App\Event\UploadFileNameListener' not found in /var/www/html/projects/admin/src/Model/Table/SellersTable.php:23

として致命的なエラーを与えているに UploadFileNameListener.phpを作成しています

答えて

1

エラーメッセージから、現在のクラスの名前空間に対する相対的な名前空間でクラスをロードしようとしていることが明らかです。試してみてください

$listener = new \App\Event\UploadFileNameListener(); 
関連する問題