如何在symfony 2中声明帮助程序

如何在symfony 2中声明帮助程序,symfony,Symfony,我想在我的应用程序中使用自定义助手 我在Bundle/Helper/Myhelper.php中使用创建了文件Myhelper.php namespace Project\Bundle\Helper; class Myhelper { public function __construct($doctrine) { $this->doctrine = $doctrine; } function testMyHelper () {

我想在我的应用程序中使用自定义助手

我在Bundle/Helper/Myhelper.php中使用创建了文件Myhelper.php

namespace Project\Bundle\Helper;

class Myhelper {

    public function __construct($doctrine) {

        $this->doctrine = $doctrine;

    }

    function testMyHelper () {

        return "hi";

    }

}
我试着在我的控制器中调用它:

$myHelper = $this->get('Myhelper');
但我有以下错误:

在呈现模板期间引发异常(“您已请求不存在的服务“myhelper”。)

我必须在特定的配置文件中声明它吗


Thx

您应该在symfony上看到服务的定义。 (请参阅:详细说明了如何实现服务(由容器使用))

例如:

#app/config/services.yml
服务:
我的助手:
班级:你们班

参数:[@theservicedependents]
您尝试将helper用作服务。如果您想使用静态方法创建helper作为类,那么您的实现将起作用。在您的示例中,您应该将类注册为服务。如何在官方symfony中读取服务。

当您调用
$controller->get($id)
函数时,它指的是由给定的
$id
注册的服务。如果要在控制器中使用此帮助器,则需要将其注册为
service.yml
文件中的服务(或用于服务声明的xml、php)

然后你可以调用
$this->get('app.helpers.my_helper')
以获取服务实例

如果您不想在controller中使用它,而是想在twig中使用它,则需要将其作为twig扩展注入,并通过依赖项注入注入您的服务:

# app/config/services.yml
services:
    app.twig_extension:
        class: AppBundle\Twig\AppExtension
        public: false
        arguments: ['@app_helpers.my_helper']
        tags:
            - { name: twig.extension }

您可以在symfony中了解更多信息,我需要知道在哪种情况下您想要使用助手

Symfony的结构是永远不需要这种工具。
也许您在项目的概念上有问题,或者您不知道一些工具。

最后,我将它用作一种服务,它用于从任何控制器在数据库中填充通知
# app/config/services.yml
services:
    app.twig_extension:
        class: AppBundle\Twig\AppExtension
        public: false
        arguments: ['@app_helpers.my_helper']
        tags:
            - { name: twig.extension }