Что мне нужно
вот что я попробовал
/ SRC / Акме / bundlename / Туиг
Acmeextension.php
public function getFunctions()
{
return array(
'count' => new \Twig_Function_Method($this, 'count'),
);
}
public function count()
{
session_start();
if(isset($_SESSION["count"]))
{
$accesses = $_SESSION["count"] + 1;
}
else
{
$accesses = 1;
}
$_SESSION["count"] = $accesses;
return $accesses;
}
вот код ветки:
function callback()
{
var page = {{ count}};
if (page >4)
{
alert("limit exceeded");
}
else
{
alert("ok");
}
}
callback();
calling in twig
{{ count }}
я сослался на ссылку Передача сеанса в шаблон TWIG.
пользовательское расширение Twig http://symfony.com/doc/current/cookbook/templating/twig_extension.html
проблема
Если вы хотите внедрить сеансы за пределы области действия в свое собственное расширение.
Я бы сделал это.
//AppKernel +add
protected function initializeContainer() {
parent::initializeContainer();
if (PHP_SAPI == 'cli') {
$this->getContainer()->enterScope('request');
$this->getContainer()->set('request', new \Symfony\Component\HttpFoundation\Request(), 'request');
}
}
Тогда в вашем контейнере услуг
<!-- Custom Twig Extensions -->
<service id="yourid" class="yourclasspath">
<argument type="service" id="service_container" />
<tag name="twig.extension" />
</service>
Тогда в вашем twig.php
class Twig extends \Twig_extension {
private $request;
public function __construct(Container $container) {
$this->request = $container->get('request');
}
public function getFunctions() {
return array(
'count' => new \Twig_Function_Method($this, 'count'),
);
}
public function count() {
$session = $this->request->getSession();
if(session->has('count')) {
$session->set('count') += 1;
} else {
$session->set('count') = 1;
}
return $session->get('count');
}
}
Тогда то же самое в вашей ветке
Вы используете более старую версию Twig
? Использование Twig_Function_Method
устарела.
Если мы игнорируем тонкие различия между старыми и новыми версиями Twig
Я бы сделал это так
Примечание: на самом деле это решение @ Мэтью, но я позволил себе немного упростить его 🙂
Определение сервиса Twig
<!-- Custom Twig Extensions -->
<service id="yourid" class="yourclasspath">
<argument type="service" id="session" />
<tag name="twig.extension" />
</service>
Расширительный файл Twig
class Twig extends \Twig_extension {
private $session;
public function __construct(Session $session) {
$this->session = $session
}
public function getFunctions() {
return array(
new \Twig_SimpleFunction('count', array($this, 'count') ),
);
}
public function count() {
if($this->session->has('count')) {
$this->session->set('count') += 1;
} else {
$this->session->set('count') = 1;
}
return $this->session->get('count');
}
}