symfony 4:如何从RootDir获取"/ public"

Mou*_*ida 12 symfony symfony4

我在该public文件夹下有一个图像.
如何在symfony4中获取我的图像目录?
在symfony 3中,它相当于:

$webPath = $this->get('kernel')->getRootDir() . '/../web/';
Run Code Online (Sandbox Code Playgroud)

got*_*oto 12

你可以使用其中之一

$webPath = $this->get('kernel')->getProjectDir() . '/public/'; 
Run Code Online (Sandbox Code Playgroud)

或参数 %kernel.project_dir%

$container->getParameter('kernel.project_dir') . '/public/';
Run Code Online (Sandbox Code Playgroud)

  • 值得一提的是@CarlosDelgado,您提到的控制器类已在Symfony 4.2中弃用,而@Symfony 4.2之后已弃用,请改用{@see AbstractController}。 (6认同)
  • 值得一提的是控制器需要扩展Symfony\Bundle\FrameworkBundle\Controller\Controller类,而不是大多数示例中的抽象类Symfony\Bundle\FrameworkBundle\Controller\AbstractController (4认同)

小智 8

在控制器中(也继承了 AbstractController):

$projectDir = $this->getParameter('kernel.project_dir');
Run Code Online (Sandbox Code Playgroud)


Anj*_*lva 8

container如果您不在控制器中,则仅注入整体以访问参数是一种不良做法ParameterBagInterface像这样自动接线

protected $parameterBag;

public function __construct(ParameterBagInterface $parameterBag)
{
    $this->parameterBag = $parameterBag;

}
Run Code Online (Sandbox Code Playgroud)

然后像这样访问您的参数(在本例中为项目目录),

$this->parameterBag->get('kernel.project_dir');
Run Code Online (Sandbox Code Playgroud)

Hope someone will find this helpful.

Cheers.


小智 5

parameters:
    webDir: '%env(DOCUMENT_ROOT)%'
Run Code Online (Sandbox Code Playgroud)


Man*_*olo 5

您可以注入KernelInterface服务或其他任何内容,然后使用以下命令获取项目目录$kernel->getProjectDir()

<?php

namespace App\Service;

use Symfony\Component\HttpKernel\KernelInterface;

class Foo
{
    protected $projectDir;

    public function __construct(KernelInterface $kernel)
    {
        $this->projectDir = $kernel->getProjectDir();
    }

    public function showProjectDir()
    {
        echo "This is the project directory: " . $this->projectDir;
    }
}
Run Code Online (Sandbox Code Playgroud)