Что мне нужно
вот что я пробовал
/ 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 }}
я ссылаюсь на ссылку Passing Session на шаблон 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'); } }