Daw*_*hia 120 php symfony symfony-2.8 symfony-config-component
从控制器内部获取根应用程序目录的最佳方法是什么?是否有可能将其置于控制器之外?
现在我通过将它(从参数)传递给服务作为参数得到它,如下所示:
services:
sr_processor:
class: Pro\Processor
arguments: [%kernel.root_dir%]
Run Code Online (Sandbox Code Playgroud)
是否有更好,更简单的方法在Symfony2中获取此信息?
Jov*_*vic 219
更新2018-10-21:
截至本周,getRootDir()
已被弃用.请使用getProjectDir()
Muzaraf Ali的评论部分中的建议.
-
用这个:
$this->get('kernel')->getRootDir();
Run Code Online (Sandbox Code Playgroud)
如果你想要web root:
$this->get('kernel')->getRootDir() . '/../web' . $this->getRequest()->getBasePath();
Run Code Online (Sandbox Code Playgroud)
这将从控制器动作方法...
编辑:至于服务,我认为你做的方式尽可能干净,虽然我会把完整的内核服务作为一个参数......但这也会有所帮助......
Chr*_*ris 14
在Symfony 3.3中,您可以使用
$projectRoot = $this->get('kernel')->getProjectDir();
Run Code Online (Sandbox Code Playgroud)
获取Web /项目根目录.
如果您使用此路径访问非代码的项目部分(例如上载目录或SQLite数据库),那么最好将路径转换为参数,如下所示:
parameters:
database_path: '%kernel.root_dir%/../var/sqlite3.db'
Run Code Online (Sandbox Code Playgroud)
此参数可以在您需要的任何位置注入,因此您不必再烦扰代码中的路径.此外,可以在部署时覆盖该参数.最后,每个维护程序员都会更好地了解您使用它的目的.
更新:修复了kernel.root_dir常量使用情况.
小智 6
除此之外,您还可以使用正则表达式:
$directoryPath = $this->container->getParameter('kernel.root_dir') . '/../web/bundles/yourbundle/';
$directoryPath = preg_replace("/app..../i", "", $directoryPath);
echo $directoryPath;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
154008 次 |
最近记录: |