【问题标题】:Get image folder URI from controller and twig template从控制器和树枝模板获取图像文件夹 URI
【发布时间】:2016-05-11 19:03:02
【问题描述】:

我将我网站的所有公共图像移到 symfony 的 web 文件夹之外的一个文件夹中,以便可以与其他 web 应用程序共享。 我创建了一个指向该文件夹的符号链接,以便可以从 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

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

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

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

基本上(例如我的 application_01):

开发环境会返回:

http://localhost/images/my_image.jpg

生产环境,会返回:

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

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

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


编辑

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

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

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

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

难道没有另一种方法可以独立于服务器当前处理的请求来获取此信息吗?

【问题讨论】:

    标签: php symfony uri symfony-2.3


    【解决方案1】:

    定义如下网址

    图片网址: 路径:/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/

    【讨论】:

    • 完美,这行得通。我刚刚测试了它。只需要一分钟就可以理解第二行。这实际上是放在路由配置文件中的定义。谢谢你的帮助。这并不难,但我无法自己解决这个问题。
    • 我不允许发布另一个问题,因为这个问题太新了,但我有一个问题。由于图像路径包含从图像名称本身推导出的子文件夹(a12f23.jpg 存储在 /01/2f/ 子文件夹中)Symfony 不接受我的“图像”参数。它不接受图像名称 (/01/2f/012f23.jpg) 中的特殊“/”字符。任何线索如何让 Symfony 接受这种嵌入子文件夹的图片名称?
    • @Nitseg symfony.com/doc/current/cookbook/routing/… Google 是你的朋友 ;)
    • 是的,但是该去吃午饭了。对不起,不好的借口... ;-)
    • 最后它并没有真正解决问题,因为 app_dev.php(在开发环境中)被放在地址之间,因此客户端尝试从:localhost/app_dev.php/images/my_image.jpg 而不是@987654324 访问图像@。进一步查看 symfony 代码,我发现 $router->generate() 函数使用了 $this->context->getHttpHost() 和 getHttpScheme()。恐怕我不能直接使用 $router->generate() ...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 2012-07-27
    • 1970-01-01
    • 2017-09-30
    • 2014-04-04
    • 1970-01-01
    相关资源
    最近更新 更多