【问题标题】:symfony2 relative directory routes from command来自命令的 symfony2 相对目录路由
【发布时间】:2017-10-16 09:06:39
【问题描述】:

我在使用命令行的相对目录时遇到了一些麻烦。

我创建了一个命令(php app/console generate:command)。使用此命令,我需要删除项目的“web/myFolder”目录中的一些文件。

protected function execute(InputInterface $input, OutputInterface $output)
    {     
        //$directorio = 'myFolder'; /*Do not work*/           
        $directorio = '\XAMPP\htdocs\MiProject\web\myFolder';
        $files  = scandir($directorio);

        foreach($files as $f){ /*do something*/ }
}

从命令中,我必须从 D:/ 写入完整的目录,所以我没有 symfony 项目的相对目录,就像我在任何控制器中所做的那样。有没有办法使用项目文件夹中的相对目录?

使用非相对目录,我应该在将项目放在生产服务器上时替换此目录。所以我应该在测试和生产环境之间多次更改它。

非常感谢。

【问题讨论】:

    标签: symfony directory routes command symfony-console


    【解决方案1】:

    您可以使用预定义参数,例如 kernel.root_dir,它们通常指向 AppKernel 文件所在的目录 (<project_root>/app)。

    所以只需访问位于容器中的参数,例如

    // From controller
    $this->getParameters('kernel.root_dir');
    

    或更笼统地说:

    // from service/command
    $this->container->getParameters('kernel.root_dir');
    

    所以在你的情况下应该是:

    $directorio = $this->getContainer()->getParameter('kernel.root_dir').'/../‌​web/myFolder';
    

    一些信息here in this article

    希望有帮助

    【讨论】:

    • 完美运行 :) 谢谢 Matteo
    • 但是您应该通过以下方式更改容器参数: $directorio = $this->getContainer()->getParameter('kernel.root_dir').'/../web/myFolder' :) : )
    • Symfony 3.3 还添加了%kernel.project_dir%,它指向包含web、app 等的目录——避免在路径中添加/..
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 2014-11-30
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多