从控制器和树枝模板获取图像文件夹 URI

Get image folder URI from controller and twig template

我将我网站的所有 public 图片移到了 symfony 的 web 文件夹之外的一个文件夹中,这样它就可以与其他 web 应用程序共享。 我为此文件夹创建了一个符号 link,以便可以从 symfony 应用程序的 Web 文件夹访问它。

ln -s /absolute/path/to/images /path/to/symfony/application_01/web/images
ln -s /absolute/path/to/images /path/to/symfony/application_02/web/images

等等...适用于所有应用程序。

我正在寻找一种方法,使我能够在我的本地主机 开发环境中以及 远程 Web 服务器上的生产环境中检索图像 URI。

我希望能够从控制器的 twig 模板 AND 中检索此 URI。

基本上(例如我的application_01):

开发环境中会return:

http://localhost/images/my_image.jpg

生产环境中,会return:

http://www.application_01.com/images/my_image.jpg

我的问题是我找到了很多不同的方法来获取 URI,但我并不完全清楚 Symfony 如何管理它们以及使用什么函数来使全局解决方案在所有情况下都有效。

实现我的目标的最佳方法是什么?


编辑

具体来说,我发现了一些非常相似的问题的答案,建议使用以下函数:

$request->getScheme(); $request->getHttpHost();

这似乎对应于值或超全局 $_SERVER['REQUEST_SCHEME'] 和 $_SERVER['HTTP_HOST']

而且我不知道这是否是获取此信息的正确方法,因为这是 linked 到服务器收到的当前请求。

是否有另一种方法可以独立于服务器当前处理的请求获取此信息?

定义如下url

image_url: 路径:/images/{image}

那就这样用吧

/** @var Router $router */
$router = $this->get('router');
$url = $router->generate('image_url', ['image' => 'my_image.jpg'], Router::ABSOLUTE_URL);

$url 现在包含您图像的绝对 url。当然,这是您能想到的最佳实践:)

----- 回答您关于 app_dev.php 的评论 我们公司几个月前就使用了这个解决方案。

    preg_replace('#/(.+?)\.php)', '', $router->generate('my_url');

http://techimho.com/index.php/2015/10/15/generate-production-url-in-dev-environment/