я использую SensioLabs Insight контролировать качество моего кода.
Для простой загрузки файла я должен получить абсолютный путь к моей папке загрузок:
protected function getUploadRootDir()
{
// the absolute directory path where uploaded
return __DIR__.'/../../../../web/'.$this->getUploadDir();
}
Код непосредственно из официальной документации (Как обрабатывать загрузку файлов с помощью Doctrine)
Но SLInsight выдает предупреждение, если анализируемый код содержит __DIR__
или же __FILE__
Магические константы PHP:
__DIR__
а также__FILE__
константы могут конфликтовать с системой переопределения ресурсов Symfony.
Как использование этих констант может вызвать конфликты с Symfony?
И как я могу избежать их в моем коде?
В случае с классом загрузки файлов вы, вероятно, можете игнорировать это сообщение об ошибке. Но в других случаях лучше использовать локатор файлов Symfony вместо жестких путей к файлам. Например:
$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
от Symfony\Component\HttpKernel\Bundle\Bundle
учебный класс.
Это возвращает тот же результат realpath(__DIR__)
,
Так делаю $this->getPath() . '/Resources/config/doctrine/mappings'
такой же как realpath(__DIR__ . '/Resources/config/doctrine/mappings')
,
Первоначально предложено Вот.