Я использую Doctrine ORM в своем проекте PHP.
В одном из моих запросов я использую функции «COS» (косинус) и «SIN» (синус), чтобы сделать это возможным в Doctrine, я должен добавить это в свою конфигурацию управления объектами:
$config->addCustomNumericFunction('COS', 'DoctrineExtensions\Query\Mysql\cos');
$config->addCustomNumericFunction('SIN', 'DoctrineExtensions\Query\Mysql\sin');
Это прекрасно работает, когда я запускаю его на своем локальном ПК + сервере.
Но как только я размещаю проект на онлайн-сервере, я сталкиваюсь с этими ошибками:
Fatal error: Class 'DoctrineExtensions\Query\Mysql\cos' not found in /home/USER/domains/USER.com/public_html/MYDIRECTORY/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php on line 3418
Fatal error: Class 'DoctrineExtensions\Query\Mysql\sin' not found in /home/USER/domains/USER.com/public_html/MYDIRECTORY/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php on line 3418
Он ищет в каталоге vendor \ doctrine вместо каталога vendor \ beberlei \ DoctrineExtensions.
Мой композитор содержит:
"beberlei/DoctrineExtensions": "dev-master"
А автозагрузчик производителя содержит:
'DoctrineExtensions\\' => array($vendorDir . '/beberlei/DoctrineExtensions/src')
Может кто-нибудь объяснить это мне … Я попытался добавить загрузчик классов, но все еще та же проблема.
Localhost работает нормально …
При добавлении функций синуса и косинуса в конфигурацию entitymanager я использовал:
$config->addCustomNumericFunction('COS', 'DoctrineExtensions\Query\Mysql\cos');
$config->addCustomNumericFunction('SIN', 'DoctrineExtensions\Query\Mysql\sin');
Решение выше работает на локальном ПК + сервер.
При перемещении файлов проекта на веб-сервер вышеуказанная конфигурация не будет работать.
Вы должны изменить первую букву последнего слова в DoctrineExtensions namespace
в верхний регистр, вот так:
$config->addCustomNumericFunction('COS', 'DoctrineExtensions\Query\Mysql\Cos');
$config->addCustomNumericFunction('SIN', 'DoctrineExtensions\Query\Mysql\Sin');
В принципе соз становится Cos а также грех становится грешить .
Теперь он работает на онлайн-сервере. Наконец-то все заработало!
Других решений пока нет …