找不到cakephp事件侦听器

找不到cakephp事件侦听器,cakephp,event-handling,cakephp-3.2,Cakephp,Event Handling,Cakephp 3.2,我正在使用CakePHP3.2和proffer插件上传图像 默认情况下,图像的路径如下所示 /media/files/<tablename>/<primary_key>/<filename> 但这会导致致命错误为 错误:未捕获错误:在中找不到类“App\Model\Table\App\Event\UploadFileNameListener” /var/www/html/projects/admin/src/Model/Table/SellersTable.

我正在使用CakePHP3.2和proffer插件上传图像

默认情况下,图像的路径如下所示

/media/files/<tablename>/<primary_key>/<filename>
但这会导致致命错误为

错误:未捕获错误:在中找不到类“App\Model\Table\App\Event\UploadFileNameListener” /var/www/html/projects/admin/src/Model/Table/SellersTable.php:23


从错误消息中可以清楚地看出,它正在尝试使用相对于当前类的名称空间的名称空间加载该类。试一试

$listener = new \App\Event\UploadFileNameListener();
<?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;
    }
}
<?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;
    }
}
$listener = new \App\Event\UploadFileNameListener();