从Symfony表单中获取请求对象的最佳方法?
问题描述:
我使用Symfony和Doctrine为我的CMSes生成表单。最近我一直在根据特定的URL参数设置默认值来定制它们。从Symfony表单中获取请求对象的最佳方法?
例如,我有两个型号:PollQuestion
和PollChoice
。 PollChoice
通过poll_question_id
字段与PollQuestion
关联。 PollChoice
表单有一个下拉列表,列出PollChoice
可以附加到的所有可用PollQuestion
。我也有两条路线:pollchoices/new
和poll/:poll_id/choice/new
。两条路线都显示PollChoiceForm
,但通过使用第二条路线,您会自动将PollQuestion下拉列表设置为:poll_id
URL参数。我只需通过从请求对象中获取:poll_id
的值来更改PollChoiceForm
类中的下拉小部件的默认值即可。
我的问题是双重的:
1)I目前通过使用sfContext::getInstance()->getRequest()
获取请求对象。我知道sfContext::getInstance()
是皱眉,但我一直无法找到另一种方式来获取它。有另一种方法吗?依赖注入似乎是一种很好的方式,但是我不知道如何在不进行大量黑客攻击的情况下实现这一点(我想避免这种攻击)。
2)我完全错误的方式来改变基于URL参数的窗体的默认值?
答
无论何时我需要表单中的上下文,我都是通过构造函数注入来完成的。
在动作:
$this->form = new WhateverForm($whatever, array("context" => $this->getContext()));
形式
:
$this->getOption("context");
我喜欢这个方法。我想我会编辑我的自定义管理主题的动作,以便在构造函数中自动注入它。 – 2011-06-14 19:14:18