我需要什么
- 我只想在symfony中实现session
这是我试过的
-
/src/Acme/bundlename/Twig
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; }
这是trick的代码:
function callback() { var page = {{ count}}; if (page >4) { alert("limit exceeded"); } else { alert("ok"); } } callback();
calling in twig {{ count }}
- 我只想计算页面浏览量
- 我在trick中使用了脚本,这样我如果有页面视图超过4,就会显示警告消息
- 我使用了symfony自定义函数,因此在symfony中使用了$SESSION
- 我已经在核心Php中实现了这段代码,它运行良好
我已经参考了链接通过会话到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
之间的细微差异,我会这样做。
注意:这实际上是@Matthew的解决方案,但我随意简化了一下:)
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');
}
}