Symfony Twig:获取内核根目录
Symfony Twig: Get kernel root dir
我在我的 Symfony 项目中设置了以下配置:
twig:
debug: '%kernel.debug%'
strict_variables: '%kernel.debug%'
globals:
web_dir: "%kernel.root_dir%/../web"
并且我完成了以下 twig symnfony 函数(如 中所示):
namespace AppBundle\Twig;
class AllExtentions extends \Twig_Extension
{
public function getFunctions()
{
return array(
new \Twig_SimpleFunction('versionedAsset',array($this,'versionedAsset'))
);
}
/**
* Gebnerate a cdn friendly url for the assets.
* @param string $path The url of the path RELATIVE to the css.
* @return string
*/
public function versionedWebAsset($path)
{
// Set the value of the web_dir global
// $webDir=
$hash=hash_file("sha512",$path);
return $path."?v=".$hash;
}
}
我的问题是如何将 web_dir
全局变量的值获取到 versionedAsset 函数中?
编辑 1
我使用 Symfony 的自动装配并且我 autowire/autoconfigure AllExtentions
class:
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Reference;
// To use as default template
$definition = new Definition();
$definition
->setAutowired(true)
->setAutoconfigured(true)
->setPublic(false);
$this->registerClasses($definition, 'AppBundle\', '../../src/AppBundle/*', '../../src/AppBundle/{Entity,Repository,Resources,Tests}');
您可以通过将扩展声明为 服务 然后将 服务容器 传递给它来实现:
twig.all.extensions:
class: AppBundle\Twig\AllExtentions
arguments:
- @service_container
tags:
- { name: twig.extension }
在此之后向您的扩展添加一个 __construct()
方法并使用它来获取您的 web_dir
变量:
/**
* ContainerInterface $container
*/
public function __construct($container)
{
$this->container = $container;
}
/**
* Gebnerate a cdn friendly url for the assets.
* @param string $path The url of the path RELATIVE to the css.
* @return string
*/
public function versionedWebAsset($path)
{
$webDir=$this->container->get('twig')->getGlobals()['web_dir'];
$hash=hash_file("sha512",$path);
return $path."?v=".$hash;
}
我在我的 Symfony 项目中设置了以下配置:
twig:
debug: '%kernel.debug%'
strict_variables: '%kernel.debug%'
globals:
web_dir: "%kernel.root_dir%/../web"
并且我完成了以下 twig symnfony 函数(如
namespace AppBundle\Twig;
class AllExtentions extends \Twig_Extension
{
public function getFunctions()
{
return array(
new \Twig_SimpleFunction('versionedAsset',array($this,'versionedAsset'))
);
}
/**
* Gebnerate a cdn friendly url for the assets.
* @param string $path The url of the path RELATIVE to the css.
* @return string
*/
public function versionedWebAsset($path)
{
// Set the value of the web_dir global
// $webDir=
$hash=hash_file("sha512",$path);
return $path."?v=".$hash;
}
}
我的问题是如何将 web_dir
全局变量的值获取到 versionedAsset 函数中?
编辑 1
我使用 Symfony 的自动装配并且我 autowire/autoconfigure AllExtentions
class:
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Reference;
// To use as default template
$definition = new Definition();
$definition
->setAutowired(true)
->setAutoconfigured(true)
->setPublic(false);
$this->registerClasses($definition, 'AppBundle\', '../../src/AppBundle/*', '../../src/AppBundle/{Entity,Repository,Resources,Tests}');
您可以通过将扩展声明为 服务 然后将 服务容器 传递给它来实现:
twig.all.extensions:
class: AppBundle\Twig\AllExtentions
arguments:
- @service_container
tags:
- { name: twig.extension }
在此之后向您的扩展添加一个 __construct()
方法并使用它来获取您的 web_dir
变量:
/**
* ContainerInterface $container
*/
public function __construct($container)
{
$this->container = $container;
}
/**
* Gebnerate a cdn friendly url for the assets.
* @param string $path The url of the path RELATIVE to the css.
* @return string
*/
public function versionedWebAsset($path)
{
$webDir=$this->container->get('twig')->getGlobals()['web_dir'];
$hash=hash_file("sha512",$path);
return $path."?v=".$hash;
}