即将在 Twigs 布局中使用的 Symfony2 服务方法
Symfony2 service method used in Twigs layout to soon
我已经为 Twig 注册了一个服务,我在我的主 layout.twig.html
中使用它的方法来列出一些东西。
接下来,在某些操作中,我使用相同的服务来更改其状态(更改那里的一些私有字段),我希望在呈现的页面中看到这些更改。但看起来 Twig 很快就会调用 "getter" 方法,当我的数据尚未由控制器的操作管理时。
这种情况的最佳做法是什么?我应该以某种方式使用一些事件并使我的服务成为事件侦听器吗?
示例布局代码:
<div>{{ myservice.mymethod() }}</div>
服务:
class MyService {
private $myfield = null;
....
public function setMyField($value) {
$this->myfield = $value;
}
public function myMethod() {
if($this->myfield === null) {
return 'not initialized';
} else {
$this->myfield;
}
}
....
一些控制器动作:
$myservice = $this->container->get('myservice');
$myservice->setMyField('setted in action');
我总是在呈现的页面上得到 not initialized
我认为您必须将此服务注册为 twig 扩展。
查看本手册:http://symfony.com/doc/current/cookbook/templating/twig_extension.html。
我已经为 Twig 注册了一个服务,我在我的主 layout.twig.html
中使用它的方法来列出一些东西。
接下来,在某些操作中,我使用相同的服务来更改其状态(更改那里的一些私有字段),我希望在呈现的页面中看到这些更改。但看起来 Twig 很快就会调用 "getter" 方法,当我的数据尚未由控制器的操作管理时。
这种情况的最佳做法是什么?我应该以某种方式使用一些事件并使我的服务成为事件侦听器吗?
示例布局代码:
<div>{{ myservice.mymethod() }}</div>
服务:
class MyService {
private $myfield = null;
....
public function setMyField($value) {
$this->myfield = $value;
}
public function myMethod() {
if($this->myfield === null) {
return 'not initialized';
} else {
$this->myfield;
}
}
....
一些控制器动作:
$myservice = $this->container->get('myservice');
$myservice->setMyField('setted in action');
我总是在呈现的页面上得到 not initialized
我认为您必须将此服务注册为 twig 扩展。
查看本手册:http://symfony.com/doc/current/cookbook/templating/twig_extension.html。