Search code examples
phpsymfonymagic-constants

Why absolute path constants __DIR__ and __FILE__ should not be used in Symfony


I use SensioLabs Insight to control my code quality.

For a simple file upload, I have to get the absolute path of my uploads directory:

protected function getUploadRootDir()
{
    // the absolute directory path where uploaded
    return __DIR__.'/../../../../web/'.$this->getUploadDir();
}

Code directly coming from official documentation (How to handle file uploads with Doctrine)

But SLInsight raises a warning if the code analysed contains __DIR__ or __FILE__ PHP magic constants:

__DIR__ and __FILE__ constants may conflict with the Symfony resource overriding system.

How usage of this constants can causes conflicts with Symfony?

And how can I avoid them in my code?


Solution

  • In the case of the file upload class, you can probably ignore this error message. But in other cases, it's better o use the Symfony file locator instead of hardcoding file paths. For example:

    $path = $this->get('kernel')->locateResource('@AppBundle/Resources/config/services.xml');
    

    Instead of:

    $path = __DIR__.'/../../../src/Acme/AppBundle/Resources/config/services.xml'