我想在我的应用程序中使用自定义帮助程序。
我在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
答案 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 documentation和Twig extension documentation
中详细了解此信息答案 2 :(得分:1)
您尝试使用帮助程序作为服务。如果您希望使用静态方法创建帮助器作为类,您的实现将起作用。在您的示例中,您应该将类注册为服务。您可以在官方symfony documentation中阅读的作品服务。
答案 3 :(得分:0)
我需要知道你想在哪种情况下使用帮手?
Symfony的结构是永远不需要这种工具。 也许你在项目概念上有问题,或者你可能不知道一些工具。