ReflectionException: класс не существует в psr-4 и slim: 4 framework - PullRequest
0 голосов
/ 07 апреля 2020

В настоящее время я работаю над проектом slim: 4 php, где мне нужно использовать библиотеку JsonMapper по https://packagist.org/packages/netresearch/jsonmapper. Эта библиотека не поддерживает автозагрузку psr-4 (https://github.com/humbug/php-scoper/issues/308), поэтому я добавил ее в свой composer. json в classmap.

My composer. json:

{
   "require": {
       "netresearch/jsonmapper": "dev-master",
       "slim/slim": "4.*",
       "slim/psr7": "dev-master",
       "php-di/php-di": "dev-master",
       "selective/config": "dev-master"
    },
   "autoload": {
       "psr-4": {
           "App\\": "src"
               },
       "classmap": ["vendor/netresearch/jsonmapper/src/"]
    }
}

Я также использовал другую версию composer. json (где я удалил ключ psr4):

    {
   "require": {
       "netresearch/jsonmapper": "dev-master",
       "slim/slim": "4.*",
       "slim/psr7": "dev-master",
       "php-di/php-di": "dev-master",
       "selective/config": "dev-master"
    },
   "autoload": {
       "classmap": ["src","vendor/netresearch/jsonmapper/src/"]
    }
}

Опубликовать это я сделал composer update а также composer dump-autoload

Содержимое нескольких созданных мной файлов автозагрузки выглядит следующим образом: -

  1. autoload_classmap. php

     // autoload_classmap.php @generated by Composer
    
      $vendorDir = dirname(dirname(__FILE__));
      $baseDir = dirname($vendorDir);
    
       return array('App\\Domain\\User\\Data\\UserCreateData'=>$baseDir. 
       '/src/Domain/User/Data/UserCreateData.php',
       'JsonMapper' => $vendorDir . 
       '/netresearch/jsonmapper/src/JsonMapper.php',
        );
    

2.autoload_namespaces. php

       $vendorDir = dirname(dirname(__FILE__));
       $baseDir = dirname($vendorDir);

       return array(
           'JsonMapper' => array($vendorDir . '/netresearch/jsonmapper/src'),
        );

В моем проекте есть класс модели (где я буду использовать JsonMapper) UserCreateData.

Мое определение класса выглядит следующим образом:

  <?php

     namespace App\Domain\User\Data;

     final class UserCreateData
     {
       /** @var username */
       public $username;

      /** @var age */
       public $age;

    }

Я пытаюсь преобразовать Json в php объект в моем определении функции контроллера: -

    // Collect input from the HTTP request
    $data = (array)$request->getParsedBody();

    $mapper = new \JsonMapper();
    $userDataArray = $mapper->mapArray($data, array(), 'UserCreateData');

Однако, когда я делаю это, я получаю ReflectionException: Class UserCreateData does not exist в классе JsonMapper. php.

Я подозреваю, что это как-то связано с моими пространствами имен, но не уверен, как это решить.

Мои пространства имен autoload_name. php имеет только одно сопоставленное пространство имен JsonMapper, тогда как мой класс модели находится в пространстве имен с именем App\Domain\User\Data.

Примечание : этот вопрос может быть неправильно истолкован как дубликат Класс ReflectionException не существует psr-4 ; однако этот вопрос пока не имеет решения и содержит мало деталей.

...