3

このコードを使用してフォームを作成します。

$form=$controller->beginWidget('CActiveForm', array(
            'id'=>'my-form',
            'enableAjaxValidation'=>false
    ));

これを行うと、フォームが印刷されます。しかし、フォーム全体がメソッドで文字列として返されるため、これを変数に入れたいと思います。これどうやってするの?

4

2 に答える 2

3

以下は、出力バッファを取得し、それを変数に格納してから消去します。楽しみ!!!

ob_start();

$form=$controller->beginWidget('CActiveForm', array(
        'id'=>'my-form',
        'enableAjaxValidation'=>false
    ));

$formToStore =  ob_get_clean();
于 2012-12-22T19:10:32.677 に答える
0

コントローラーの renderPartial メソッドを使用して文字列を返すことができます。フォーム全体を単独でファイルに入れるだけで、それを と呼びましょう_myForm.php

次に、この行を使用して、フォームの内容を変数に書き込みます$form

$form = $controller->renderPartial('//stuff/_myForm', $data, true);

に設定された 3 番目のパラメーターtrueは、エコーする代わりに、その renderPartial の内容を返します。これには、ウィジェット自体のエコーを「オーバーライド」することが含まれます。

この$dataパラメーターには、フォームに渡す必要があるすべての変数が含まれます。

ファイル自体はフォルダーにある必要がありprotected/views/stuff/ます。//最初のパラメーターの開始は、protected/views/フォルダーのショートカットです。

'_myForm'または、そのファイルが renderPartial の呼び出し元と同じビュー フォルダーにある場合は、最初のパラメーターのみに使用します。

注: これは、ob_startおよびを使用するオプションと実際には機能的に違いはありませんob_get_clean。それは単にそれを行うためのより多くの Yii の方法です。状況の詳細に応じて、あるバージョンが他のバージョンよりも有利な場合があります。

于 2012-12-23T23:22:25.630 に答える