2011-06-14 65 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

相關問題