Я использую SensioLabs Insight для контроля качества моего кода.
Для простой загрузки файлов я должен получить абсолютный путь к каталогу uploads:
protected function getUploadRootDir() { // the absolute directory path where uploaded return __DIR__.'/../../../../web/'.$this->getUploadDir(); }
Код, непосредственно поступающий из официальной документации ( как обрабатывать загрузки файлов с помощью Doctrine )
Но SLInsight вызывает предупреждение, если проанализированный код содержит __FILE__
или __FILE__
PHP-константы:
__FILE__
и__FILE__
могут конфликтовать с системой переопределения ресурсов Symfony.
Как использование этих констант может вызвать конфликты с Symfony?
И как я могу избежать их в моем коде?
В случае класса загрузки файлов вы, вероятно, можете игнорировать это сообщение об ошибке. Но в других случаях лучше использовать локатор файлов Symfony вместо путей к файлу hardcoding. Например:
$path = $this->get('kernel')->locateResource('@AppBundle/Resources/config/services.xml');
Вместо:
$path = __DIR__.'/../../../src/Acme/AppBundle/Resources/config/services.xml'
Ну, это на самом деле то, что SensioLabs Insight не обрабатывает правильно. Он предупреждает об использовании констант из-за системы переопределения ресурсов, но во многих случаях эти константы используются в местах, которые не связаны с системой переопределения ресурсов (и это, вероятно, имеет место для вашего кода здесь). Таким образом, вы можете игнорировать предупреждение в этом случае
Если вы создаете сторонний пакет и хотите найти какие-то ресурсы, (хорошее) решение, предлагаемое @Javier, неприменимо, поскольку оно генерирует исключение:
ServiceNotFoundException in ContainerBuilder.php line 816: You have requested a non-existent service "kernel".
В этом случае решение должно использовать $this->getPath()
, метод, унаследованный BundleNameBundle
из BundleNameBundle
Symfony\Component\HttpKernel\Bundle\Bundle
.
Это возвращает тот же результат realpath(__DIR__)
.
Итак, $this->getPath() . '/Resources/config/doctrine/mappings'
$this->getPath() . '/Resources/config/doctrine/mappings'
совпадает с realpath(__DIR__ . '/Resources/config/doctrine/mappings')
.
Первоначально предлагалось здесь .