2011-06-14 67 views
2

我使用Symfony和Doctrine为我的CMSes生成表单。最近我一直在根据特定的URL参数设置默认值来定制它们。从Symfony表单中获取请求对象的最佳方法?

例如,我有两个型号:PollQuestionPollChoicePollChoice通过poll_question_id字段与PollQuestion关联。 PollChoice表单有一个下拉列表,列出PollChoice可以附加到的所有可用PollQuestion。我也有两条路线:pollchoices/newpoll/:poll_id/choice/new。两条路线都显示PollChoiceForm,但通过使用第二条路线,您会自动将PollQuestion下拉列表设置为:poll_id URL参数。我只需通过从请求对象中获取:poll_id的值来更改PollChoiceForm类中的下拉小部件的默认值即可。

我的问题是双重的:

1)I目前通过使用sfContext::getInstance()->getRequest()获取请求对象。我知道sfContext::getInstance()是皱眉,但我一直无法找到另一种方式来获取它。有另一种方法吗?依赖注入似乎是一种很好的方式,但是我不知道如何在不进行大量黑客攻击的情况下实现这一点(我想避免这种攻击)。

2)我完全错误的方式来改变基于URL参数的窗体的默认值?

回答

3

无论何时我需要表单中的上下文,我都是通过构造函数注入来完成的。

在动作:

$this->form = new WhateverForm($whatever, array("context" => $this->getContext())); 
形式

$this->getOption("context"); 
+0

我喜欢这个方法。我想我会编辑我的自定义管理主题的动作,以便在构造函数中自动注入它。 – 2011-06-14 19:14:18

相关问题