0

コントローラーに電話があります:

コントローラ:

    if($appointment->getAnamnese() == NULL){
        $entity = new Anamnese($appointment);
        $form = $this->createForm(new AnamneseType(),null,array('history' => 'Digite o Historico aqui'));
    }else{ 
        $entity = $appointment->getAnamnese();
        $form = $this->createForm(new AnamneseType(), null, array('history' => $entity->getHistory()));
    }

アナム語の種類:

    $builder->add('history', 'ckeditor', array(
        'data' => $options['history'], 'toolbar' => $toolbar));
}


public function getDefaultOptions(array $options)
{
    return array(
            'history' => "Digite o Historico aqui"
    );
}

その履歴情報をフォームに挿入したいのですが、「データ」オプションを設定するだけで、思ったように機能しません...

どうすればできますか?

問題は、データを挿入した後、フォームに戻すことができないことです..

4

3 に答える 3

3

setData()関数を使用してデータを設定します。

例えば:

$form = $this->createForm(new AnamneseType())->setData($entity);

または多分:

$form = $this->createForm(new AnamneseType(), $entity);
于 2012-10-26T01:46:11.590 に答える
1

あなたはそれを間違った方法で見ています。

ここでオプションを使用する必要があります。

フォームを作成するには:

$form = $this->createForm(new AnamneseType(), null, array('history' => $entity->getHistory()));

フォームは次のようになります。

public function buildForm(FormBuilder $builder, array $options){

    $toolbar = array(
        array(
            'name' => 'document',
            'items' => array('Source','-','DocProps','Preview','Print','-','Templates')
        ),
        array(
            'name' => 'clipboard',
            'items' => array('Cut','Copy','Paste','PasteText','PasteFromWord','-','Undo','Redo')
        ),
        array(
            'name' => 'editing',
            'items' => array('Find','Replace','-','SelectAll','-','SpellChecker', 'Scayt')
        ),

        array(
            'name' => 'basicstyles',
            'items' => array('Bold','Italic','Underline','Strike','Subscript','Superscript','-','RemoveFormat')
        ),
        '/',                
        array(
            'name' => 'paragraph',
            'items' => array('NumberedList','BulletedList','-','Outdent','Indent','-','Blockquote','CreateDiv','-','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiLtr','BidiRtl')
        ),
        array(
            'name' => 'links',
            'items' => array('Link','Unlink','Anchor')
        ),
        array(
            'name' => 'insert',
            'items' => array('Image','Table','HorizontalRule','Smiley','SpecialChar','PageBreak')
        ),
        '/',
        array(
            'name' => 'styles',
            'items' => array('Styles','Format','Font','FontSize')
        ),
        array(
            'name' => 'colors',
            'items' => array('TextColor','BGColor')
        ),
        array(
            'name' => 'tools',
            'items' => array('Maximize', 'ShowBlocks','-','About')
        )
    );

    $builder->add('history', 'ckeditor', array( 'data' => $options['history'] , 'toolbar' => $toolbar));
}

...

public function getDefaultOptions(array $options)
{
    return array(
        'history' => "Digite o Historico aqui"
    );
}
于 2012-10-25T18:48:10.623 に答える
1

さて、フォームは 2 番目の条件で生成され、$entity->getHistory()null を返すようです。

以下のようにコントローラーコードを編集します

$historyValue = 'Digite o Historico aqui'; // Default history value
if($appointment->getAnamnese()){ 
    $entity = $appointment->getAnamnese();
    // Checks whether the history is not empty (null or equals '' in this case)
    if (!empty($entity->getHistory())) { 
        $historyValue = $entity->getHistory();
    }

}

$form = $this->createForm(new AnamneseType(),null,array('history' => $historyValue));

公式ドキュメントを読むことを強くお勧めします。

symfony フォーム


フォーム データはコントローラーから渡されることになっています。

交換

$form = $this->createForm(new AnamneseType($entity->getHistory()));

$form = $this->createForm(new AnamneseType(), array(
    'history' => null === $entity->getHistory()
               ? 'Digite o Historico aqui'
               : $entity->getHistory,
));

フォーム クラスからコンストラクタを削除し、置き換えます

if($this->history != NULL){
    $builder->add('history', 'ckeditor', array( 'data' => $this->history , 'toolbar' =>       $toolbar));
}else{
    $builder->add('history', 'ckeditor', array( 'data' => "Digite o Historico aqui" , 'toolbar' => $toolbar));
}

$builder->add('history', 'ckeditor', array('toolbar' => $toolbar));

データをエンティティにマップし直す場合は、フォームの公式ドキュメントを確認してください

更新:

履歴フィールドからテンプレートに値を渡すには、その定義を次のように編集します。

$builder->add('history', 'ckeditor', array(
    'attr' => array(
        'toolbar' => $toolbar,
    ),
));

toolbarこのオプションには、次の方法でアクセスできます。

{{ form.history.get('attr').toolbar }}

より良い解決策があります:カスタム フォーム タイプの作成

于 2012-10-25T18:50:58.007 に答える