我在Symfony 2.7.10中使用资源,我想在控制器中生成图像网址。
在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
现在我想在控制器中生成相同的url,这怎么可能?
答案 0 :(得分:17)
好吧,看到这个答案在当时受到一点关注,我应该指出两件事:
如何使用Container服务处理 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'),
));
}
如何使用Container服务和新的Autowire配置处理 Symfony 3.4.6 的资产网址:
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的资产网址:
public function indexAction(Request $request, \Symfony\Component\Asset\Packages $assetsManager)
{
$path = $assetsManager->getUrl('bundles/myBundleName/images/logo.png');
}
对于Symfony 4,很少有人知道:
composer require symfony/asset
。使用名为templating.helper.assets
的帮助程序服务可以解决问题。
尝试这样的事情:
var_dump($this->get('templating.helper.assets')->getUrl('bundles/myBundleName/images/logo.png'));
答案 1 :(得分:7)
如果你使用symfony 3.4+和自动连接,你可以DI包实例并使用它。 例如,对控制器动作功能说:
public function myAction(Packages $assetPackage)
{
$url = $assetPackage->getUrl('css/main-ie.css');
}
答案 2 :(得分:6)
但是在symfony 3.它已不再适用了。
在symfony 3中使用
$this->container->get('assets.packages')->getUrl($path);
实施例
private function getAssets($path)
{
return $this->container->get('assets.packages')->getUrl($path);
}
$this->getAssets(...your path...);