Php 模板中的呼叫服务
我无法从模板中调用服务。我做的和答案中的完全一样,但是我得到了模板中的“变量”newmessages“不存在” 我还尝试在父模板中返回服务,但从未调用父模板,因为没有对它的请求,请求只对子模板执行Php 模板中的呼叫服务,php,symfony,templates,twig,Php,Symfony,Templates,Twig,我无法从模板中调用服务。我做的和答案中的完全一样,但是我得到了模板中的“变量”newmessages“不存在” 我还尝试在父模板中返回服务,但从未调用父模板,因为没有对它的请求,请求只对子模板执行 public function indexAction(){ $locationService = $this->container->get('newmessages'); return $this->render( 'MedAppCrudBun
public function indexAction(){
$locationService = $this->container->get('newmessages');
return $this->render(
'MedAppCrudBundle:UserBackend\Message:index.html.twig',
array('newmessages'=>$locationService->methodToCalculate())
);
}
如何从父模板调用服务?上一个问题的答案不起作用。你的问题的答案很简单。将服务公开为细枝全局变量。根据您的示例,您应该添加类似于
config.yml
twig:
debug: "%kernel.debug%"
strict_variables: "%kernel.debug%"
globals:
newmessages: "@newmessages"
要在细枝中使用它,只需编写{{{newmessages.methodToCalculate()}}
您可以在文档页面中阅读更多关于此的信息
下面是一个更详细的示例:
// Add this to config.yml
twig:
debug: "%kernel.debug%"
strict_variables: "%kernel.debug%"
globals:
newmessages: "@newmessages"
您可以将服务公开为细枝函数,并在细枝语句中使用它。 例如,将扩展定义为: 服务.yml
######### TWIG EXTENSION
acme.message_helper_twig_extension:
class: Acme\MessageBundle\Twig\MessageHelperExtension
arguments: [@newmessages]
tags:
- { name: twig.extension }
并按以下步骤实施:
然后,您可以在细枝中使用它作为:
{{ twig_method_reference_name() }}
希望这有助于将其公开为一个小树枝扩展请您详细说明一下好吗?嗨@George检查我的回答如果您看到错误,请编辑错误的模板。您只能在
MedAppCrudBundle:UserBackend\Message:index.html.twig
中访问此变量,但您可以将其传递给其他模板。嗯,如果它是全局声明的,是否没有问题?我只想在少数几个模板中使用它,而能够在所有模板中使用它对我来说似乎很糟糕。如果你不使用你的服务,那么这两种方式都已经加载了,所以基本上是一样的。如果您使用惰性服务
,则只有在您实际从服务调用方法时才会实例化它。我正在尝试从命名空间“MedApp\CrudBundle\MedAppCrudBundle\Services”加载类“NewMessagesService”。您是否忘记了另一个名称空间的“use”语句。我用一个过于简单的例子更新了我的答案。所以每次我有一个带有变量的父细枝,我必须定义一个服务,然后将它定义为细枝扩展?听起来像是很多毫无意义的工作,而且似乎在每个控制器中调用它将是一个更好的解决方案。还是我错了?细枝扩展只是向细枝层公开服务的一种方式。假设newmessages
是一个服务,在公开的方法中,该服务将新消息的数量返回到细枝。虽然这在技术上是一个有效的答案,但我相信这会给等式增加一点复杂性——多了一个服务,多了一个类(这是对原始类的包装)。在IMHO中,细枝扩展主要用于进一步扩展核心细枝功能,如附加功能和过滤器。
// in your twig template do this
{{ newmessages.methodToCalculate() }} // outputs "location calculated."
######### TWIG EXTENSION
acme.message_helper_twig_extension:
class: Acme\MessageBundle\Twig\MessageHelperExtension
arguments: [@newmessages]
tags:
- { name: twig.extension }
namespace Acme\MessageBundle\Twig\MessageHelperExtension;
class MessageHelperExtension extends \Twig_Extension {
protected $newMessages;
function __construct($newMessages)
{
$this->newMessages = $newMessages;
}
public function getFunctions()
{
return array(
//////////////////////////////////
'twig_method_reference_name'=> new \Twig_Function_Method($this, 'getMessages'),
);
}
public function getMessages()
{
return $this->newMessages->getMessages()
}
/**
* Returns the name of the extension.
*
* @return string The extension name
*/
public function getName()
{
return 'message_helper';
}
}
{{ twig_method_reference_name() }}