在模板中调用服务
Call services in templates
正在关注 我无法从模板调用服务。我做的和答案中的完全一样,但是我在模板中得到 'Variable "newmessages" does not exist'。
我也试过在父模板中返回服务,但是从来没有调用父模板,因为没有请求它,请求只对子模板完成。
public function indexAction(){
$locationService = $this->container->get('newmessages');
return $this->render(
'MedAppCrudBundle:UserBackend\Message:index.html.twig',
array('newmessages'=>$locationService->methodToCalculate())
);
}
如何从父模板调用服务?上一个问题的答案无效。
你的问题的答案很简单。您将服务公开为一个 twig 全局变量。根据您的示例,您应该添加类似于 config.yml
的内容
twig:
debug: "%kernel.debug%"
strict_variables: "%kernel.debug%"
globals:
newmessages: "@newmessages"
要在你的树枝中使用它,你只需写 {{ newmessages.methodToCalculate() }}
。
您可以在 How to Inject Variables into all Templates 文档页面中阅读更多相关信息。
这里有一个更详细的例子:
// Add this to config.yml
twig:
debug: "%kernel.debug%"
strict_variables: "%kernel.debug%"
globals:
newmessages: "@newmessages"
// Add this to services.yml (or if you're using older version of Symfony, add it to config.yml as well)
services:
newmessages:
class: App\YourBundle\Service\NewMessages
// The NewMessages service class
<?php
namespace App\YourBundle\Service;
class NewMessages {
public function methodToCalculate() {
return "location calculated.";
}
}
?>
// in your twig template do this
{{ newmessages.methodToCalculate() }} // outputs "location calculated."
您可以将您的服务公开为一个 twig 函数并在 twig 语句中使用它。 See the full doc here。
例如,将扩展名定义为:
services.yml
######### 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() }}
希望对您有所帮助
正在关注
我也试过在父模板中返回服务,但是从来没有调用父模板,因为没有请求它,请求只对子模板完成。
public function indexAction(){
$locationService = $this->container->get('newmessages');
return $this->render(
'MedAppCrudBundle:UserBackend\Message:index.html.twig',
array('newmessages'=>$locationService->methodToCalculate())
);
}
如何从父模板调用服务?上一个问题的答案无效。
你的问题的答案很简单。您将服务公开为一个 twig 全局变量。根据您的示例,您应该添加类似于 config.yml
twig:
debug: "%kernel.debug%"
strict_variables: "%kernel.debug%"
globals:
newmessages: "@newmessages"
要在你的树枝中使用它,你只需写 {{ newmessages.methodToCalculate() }}
。
您可以在 How to Inject Variables into all Templates 文档页面中阅读更多相关信息。
这里有一个更详细的例子:
// Add this to config.yml
twig:
debug: "%kernel.debug%"
strict_variables: "%kernel.debug%"
globals:
newmessages: "@newmessages"
// Add this to services.yml (or if you're using older version of Symfony, add it to config.yml as well)
services:
newmessages:
class: App\YourBundle\Service\NewMessages
// The NewMessages service class
<?php
namespace App\YourBundle\Service;
class NewMessages {
public function methodToCalculate() {
return "location calculated.";
}
}
?>
// in your twig template do this
{{ newmessages.methodToCalculate() }} // outputs "location calculated."
您可以将您的服务公开为一个 twig 函数并在 twig 语句中使用它。 See the full doc here。 例如,将扩展名定义为:
services.yml
######### 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() }}
希望对您有所帮助