如何在symfony 2中声明一个帮助器

时间:2016-04-05 08:36:36

标签: symfony

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

我在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

4 个答案:

答案 0 :(得分:2)

您应该在symfony上看到服务的定义。 (参见:http://symfony.com/doc/current/book/service_container.html,它解释了如何实现服务(由容器使用)。

为您的例子:

# app/config/services.yml
services:
    myhelper:
        class:        YourClass
        arguments:    [@theservicedepedents]

然后通过$ this-> get('myhelper')

在你的控制器中调用它

答案 1 :(得分:2)

当您致电$controller->get($id)时,它会引用由给定$id注册的服务。如果要在控制器中使用此帮助程序,则需要将其作为服务注册到service.yml文件(或xml,php,无论您用于服务声明)

# app/config/services.yml
services:
    app.helpers.my_helper: # the ID of the service user to get id
        class:        Project\Bundle\Helper\MyHelper
        arguments:    ['@doctrine']

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

如果你想在控制器中使用它而不是在树枝上使用它,你需要将它作为枝条扩展注入并通过依赖注入注入你的服务:

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

您可以在symfony Service container documentationTwig extension documentation

中详细了解此信息

答案 2 :(得分:1)

您尝试使用帮助程序作为服务。如果您希望使用静态方法创建帮助器作为类,您的实现将起作用。在您的示例中,您应该将类​​注册为服务。您可以在官方symfony documentation中阅读的作品服务。

答案 3 :(得分:0)

我需要知道你想在哪种情况下使用帮手?

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