gpt4 book ai didi

symfony - 如何在 Symfony Controller 中获取 Assets img url

转载 作者:行者123 更新时间:2023-12-03 21:05:36 27 4
gpt4 key购买 nike

我在 Symfony 2.7.10 中使用 Assets ,我想在 Controller 中生成一个图像 url。

在 symfony config.yml 文件中,我添加了以下设置:

framework:
assets:
version: '311nk2'
version_format: '%%s?v=%%s'
base_path: /bundles/myBundleName

在 twig 中生成 url 可以正常工作,因此使用以下 twig 代码:
{{ asset('images/logo.png') }}

它生成:
/bundles/myBundleName/images/logo.png?v=311nk2

现在我想在 Controller 中生成相同的 url,这怎么可能?

最佳答案

好吧,看到这个答案随着时间的推移得到了一点关注,我应该指出两点:

  • 当我们在 SO 中仍然有基于版本的标记时添加了这个答案,并且问题最初是为 Sf2
  • 添加的。
  • 从那以后,情况发生了很大变化,所以我要扩展答案

  • 如何处理 的 Assets url Symfony 2.8.36 使用容器服务:
    public function indexAction(Request $request)
    {
    /** @var \Symfony\Bundle\FrameworkBundle\Templating\Helper\AssetsHelper $manager */
    $manager = $this->get('templating.helper.assets');

    return $this->render('default/index.html.twig', array(
    'base_dir' => realpath($this->container->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
    'logo' => $manager->getUrl('bundles/myBundleName/images/logo.png'),
    ));
    }

    如何处理 的 Assets url Symfony 3.4.6 使用容器服务和新的 Autowire 配置:
    public function indexAction(Request $request)
    {
    /** @var \Symfony\Component\Asset\Packages $manager */
    $manager = $this->get('assets.packages');

    return $this->render('default/index.html.twig', [
    'base_dir' => realpath($this->getParameter('kernel.project_dir')).DIRECTORY_SEPARATOR,
    'logo' => $manager->getUrl('bundles/myBundleName/images/logo.png'),
    ]);
    }


    public function autowireAction(Request $request, \Symfony\Component\Asset\Packages $assetsManager)
    {
    return $this->render('default/index.html.twig', [
    'base_dir' => realpath($this->getParameter('kernel.project_dir')).DIRECTORY_SEPARATOR,
    'logo' => $assetsManager->getUrl('bundles/myBundleName/images/logo.png'),
    ]);
    }

    如何仅使用 Autowire 配置处理 Symfony 4.0 的 Assets url:
    public function indexAction(Request $request, \Symfony\Component\Asset\Packages $assetsManager)
    {
    $path = $assetsManager->getUrl('bundles/myBundleName/images/logo.png');
    }

    对于 Symfony 4,有几件事需要了解:
  • 项目的骨架发生了一些变化,现在您必须包含您将需要的包。在这种情况下,默认情况下不包括 Assets 管理,因此为了使该服务正常工作,您需要执行 composer require symfony/asset .


  • 截至 22.03.2016 的原始答案

    使用名为 templating.helper.assets 的帮助服务可以做到这一点。
    尝试这样的事情:
    var_dump($this->get('templating.helper.assets')->getUrl('bundles/myBundleName/images/logo.png'));

    关于symfony - 如何在 Symfony Controller 中获取 Assets img url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36163803/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com