【发布时间】:2015-02-25 09:03:05
【问题描述】:
从官方文档 (http://symfony.com/doc/current/quick_tour/the_view.html#embedding-other-controllers) 我学会了如何在 Twig 模板中嵌入控制器。
Controller 注入属性时出现问题。有没有办法将 Twig 的 render(controller()) 函数与具有构造函数的控制器一起使用?
当我尝试以下操作时:
{{ render(controller(
'SomeBundle:Some:renderList',
{ 'request': app.request }
)) }}
我收到此错误:
Missing argument 1 for SomeBundle\Controller\SomeController::__construct()
此控制器的构造函数如下所示:
public function __construct($container, SomeService $someService) {
parent::__construct($container);
$this->someService = $someService;
}
容器和someService的注入在service.yml中配置。
那么,我的问题是:当这个控制器使用依赖注入时,如何将控制器嵌入到 Twig 的模板中?
更新
我可以这样做:
{{ render(app.request.baseUrl ~ '/some/route') }}
但我想避免制作路线。
更新 2
来自 service.yml 的服务定义
some.controller:
class: SomeBundle\Controller\SomeController
arguments: ["@service_container", "@some.service"]
【问题讨论】:
-
您是否将控制器正确定义为服务? symfony.com/doc/current/cookbook/controller/…
-
@Smashou 谢谢你的提问。是的,我确实正确地将我的控制器定义为服务。
-
您可以像 Sylius 项目 (github.com/Sylius/Sylius/blob/master/src/Sylius/Bundle/…) 一样使用像
{{ render(controller('some.controller')) }}这样的服务名称。尽管我可能错了,但您可能不需要过多地传递请求。 -
我一定是做错了什么,但我尝试使用 '@' 而没有它,在这两种情况下都会出现此错误:无法解析控制器名称“some.controller”
-
我强烈建议您不要使用
render。它创建了一个子请求,该子请求本身将再次加载全栈框架,从而增加服务器的负载和页面加载时间。您可以创建一个服务(注入 @template)并将其添加到 twig 全局变量并调用它。
标签: symfony dependency-injection twig