我用這個代碼來創建自己的狀態:Yii框架 - beginWidget無回聲
$form=$controller->beginWidget('CActiveForm', array(
'id'=>'my-form',
'enableAjaxValidation'=>false
));
當我做到這一點,它打印的形式。但我想把它放在一個變量中,因爲整個表單在方法中作爲字符串返回。我怎樣才能做到這一點?
我用這個代碼來創建自己的狀態:Yii框架 - beginWidget無回聲
$form=$controller->beginWidget('CActiveForm', array(
'id'=>'my-form',
'enableAjaxValidation'=>false
));
當我做到這一點,它打印的形式。但我想把它放在一個變量中,因爲整個表單在方法中作爲字符串返回。我怎樣才能做到這一點?
以下內容將輸出緩衝區存儲到一個變量中,然後將其擦除。請享用!!!
ob_start();
$form=$controller->beginWidget('CActiveForm', array(
'id'=>'my-form',
'enableAjaxValidation'=>false
));
$formToStore = ob_get_clean();
您可以使用控制器的renderPartial方法返回一個字符串。簡單地將整個表單放在一個文件中,我們稱之爲_myForm.php
。
然後使用此行的形式內容寫入到可變$form
:
$form = $controller->renderPartial('//stuff/_myForm', $data, true);
設置爲true
的第三參數將返回的RenderPartial的內容,而不是呼應。這包括'覆蓋'小部件本身的迴應。
$data
參數包括需要傳遞給窗體的任何變量。
文件本身需要位於protected/views/stuff/
文件夾中。 //
開始的第一個參數是protected/views/
文件夾的快捷方式。
或者,如果該文件與renderPartial從其調用的相同視圖文件夾中,則只需使用'_myForm'
作爲第一個參數。
注意:這與使用ob_start
和ob_get_clean
的選項在功能上並不完全不同。這只是Yii更多的方式。取決於具體情況,一個版本可能比另一個版本有優勢。
Willem,感謝您的解決方案。這是另一種方法,但是,正如George的解決方案一樣,這看起來很奇怪,因爲我只需要創建一個文件來在一個函數中使用一個小部件。 –
你能展示更多的代碼嗎?特別是它的存在的功能和目的。從歷史上看,我從來沒有必要在表單中放置一個函數,所以如果我們更好地理解你的目的,也許我們可以找到你喜歡的解決方案。 –
喬治,謝謝你的解決方案。這是一種方法,但使用ob_start和ob_get_clean時會產生什麼樣的副作用? –
沒有效果....它只是強制輸出到一個字符串,而不是......這是非常常用的方法來稍後緩存頁面的元素。 –