Я использую 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') .
Первоначально предлагалось здесь .