В настоящее время я работаю над проектом 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
Содержимое нескольких созданных мной файлов автозагрузки выглядит следующим образом: -
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 ; однако этот вопрос пока не имеет решения и содержит мало деталей.