Contributed by
Fabien Potencier
in #22315.

在Symfony 3.3中,我们引入了大量的改变和简化,以便为将在2017年11月发布的、令人着迷的Symfony 4.0做准备。

其中的一些改变,从技术角度讲是微小的,但在程序中所起的作用却是意义深远的。在Symfony程序中,为人熟知的 Kernel::getRootDir() 方法及其连带的 kernel.root_dir 参数(parameter)极易产生误导。

它们所返回的路径,是程序的kernel (通常是 AppKernel.php) 所在。在Symfony 2 和 3 中,此值通常是 app/ 目录,因此它们一般使用诸如 %kernel.root_dir%/../var/%kernel.root_dir%/../web/ 这种表达式。在Symfony 4中,kernel类已被转移到 src/ 目录,因此前述表达式将不会受到影响。

然而,多数时候使用 getRootDir() 为的是获取项目的根目录,在Symfony 3.3中我们决定引入一个全新的名为 Kernel::getProjectDir() 的方法,它可以为你提供准确答案。

这个新方法通过从存储了kernel的目录中去寻找包含了 composer.json 文件的第一个目录来发现项目的根目录,直至 composer.json 被找到为止。

实践中,这意味着你的程序可以简化大多数乃至全部使用了 %kernel.root_dir% 的表达式。例如,使用 %kernel.project_dir%/web/ 而不是 %kernel.root_dir%/../web/