I'm using assets in Symfony 2.7.10 and I want to generate an image url in the controller.
In the symfony config.yml file I have added the following setting:
framework:
assets:
version: '311nk2'
version_format: '%%s?v=%%s'
base_path: /bundles/myBundleName
In twig the generating of an url works ok, so with the following twig code:
{{ asset('images/logo.png') }}
It generates:
/bundles/myBundleName/images/logo.png?v=311nk2
Now I want to generate the same url in a controller, how is this possible?
All right, seeing that this answer get a little bit of attention over the time, I should point out two things:
How to handle asset url for Symfony 2.8.36 using the Container service:
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'),
));
}
How to handle asset url for Symfony 3.4.6 using Container service and the new Autowire configuration:
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'),
]);
}
and
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'),
]);
}
How to handle asset url for Symfony 4.0 only with Autowire configuration:
public function indexAction(Request $request, \Symfony\Component\Asset\Packages $assetsManager)
{
$path = $assetsManager->getUrl('bundles/myBundleName/images/logo.png');
}
For Symfony 4 there are few things to know:
composer require symfony/asset
.Using the helper service called templating.helper.assets
could do the trick.
Try something like this:
var_dump($this->get('templating.helper.assets')->getUrl('bundles/myBundleName/images/logo.png'));
if you are using symfony 3.4+ with auto-wiring you can DI the Packages instance and use that. eg say for a controller action function:
use Symfony\Component\Asset\Packages;
public function myAction(Packages $assetPackage)
{
$url = $assetPackage->getUrl('css/main-ie.css');
}
But in symfony 3. It's not working anymore.
In symfony 3 use
$this->container->get('assets.packages')->getUrl($path);
Ex.
private function getAssets($path)
{
return $this->container->get('assets.packages')->getUrl($path);
}
$this->getAssets(...your path...);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With