どのようにレンダリングすればよいですかread-only
symfonyフォームコンポーネントを使用するフィールド?
これは私が無駄にそれをやろうとしている方法です:
symfony 2
$builder
->add('descripcion', 'text', array(
'read_only' =>'true'
));
}
symfony
$builder
->add('descripcion', TextType::class, array(
'read_only' => 'true'
));
}
提供された回答はすべてSymfonyのこの例外で終わります:
Uncaught PHP Exception Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException: "オプション" read_only "は存在しません。
これを行う正しい方法は、フィールドでattr
プロパティを利用することです。
->add('descripcion', TextareaType::class, array(
'attr' => array(
'readonly' => true,
),
));
文字列に読み取り専用属性を宣言しました。ブール値である必要があります。
true
の前後の引用符を削除します
このような:
->add('descripcion','text',array('read_only' => true))
引用符なしで真。
フォームフィールドを読み取り専用として提示し、フォームがリクエストの新しい値を受け入れないようにする唯一の安全な方法は次のとおりです。
$builder->add(
'description',
TextType::class,
['disabled' => true]
);
いずれかを使用することの他の提案['attr' => ['readonly' => true]]
または['attr' => ['disabled' => true]]
は、偽造されたリクエストに対して脆弱なままにします。
後者のオプションはどちらもフィールドにreadonly
またはdisabled
属性を設定しますが、リクエストに含まれている場合、フォームはこのフィールドの新しい値を受け入れます。
上記の最初のオプションのみがフォームフィールドを無効にし、フォームがリクエスト内のフィールドの新しい値を受け入れないようにします。
私はこれをSymfony Form 3.4でテストしました。 4が同じように動作するかどうかはわかりません。
read_onlyはSymfony 2.8以降廃止されました。代わりにreadonlyを使用してください。そして、この属性にブール値を提供します
->add('','text',array('readonly' => true))
Symfony 4はフォームフィールドで「無効」オプションのみを使用することを許可します。ただし、「読み取り専用」とは異なります。
私が「読み取り専用」で見つけた唯一の解決策は次のとおりです。
->add('fieldname', TextType::class, [
'label' => false,
'attr'=> [ 'readonly' => true ]
])
更新:Symfony 3.0以降、readonly値はattrオプション。 http://symfony.com/doc/2.8/reference/forms/types/form.html#read-only
disabledオプションも代わりに使用できます。
Entitytypeフィールドが無効の場合は正常に機能します
->add('organizacion', EntityType::class, array(
'class' => 'AppBundle:Organizacion',
'label' => 'Institución/Organización',
'choice_label' => 'nombre',
'disabled' => true
))
その他の解決策は次のとおりです。
->add('value', TextType::class, ['disabled' => true]):
取得元: http://symfony.com/doc/current/reference/forms/types/text.html#disabled
ファミリアと証明者が他のエンティティとの関係である場合、それらはテキストタイプであってはいけないと思います。タイプを無効にするか、entityタイプに変更して、機能するかどうかを確認してください。
他の回答ではうまくいかなかったものを追加しましょう。フィールドとしての扱いですが、編集を無効にするための「微調整」は多くの場合に機能します。ただし、編集を完全に禁止するいくつかの形式でレンダリングする(つまり、ラベルとしてレンダリングする)ことは少なくとも困難です。
これを解決するには?私がしたことは、フィールドをHiddenTypeとして定義し、テンプレートで{{ form.vars.value.myfield }}
または{{ item.myfield }}
を使用してレンダリングし、「item」をエンティティオブジェクトとして、他のHTMLと同じように、何でも考えられる形で囲みます。素子。
「無効」オプションのみではエラーは発生しません
$builder
->add('descripcion', TextType::class, array(
'disabled' => 'true'
));
}
提出された値はドキュメントに従って無視されるため、無効オプションの使用をお勧めします: https://symfony.com/doc/current/reference/forms/types/text.html#disabled
$builder->add('descripcion', TextType::class, [
'disabled' => 'true',
]);
readonly
であり、read_only
ではありません。このオプションをattr
に次のように設定する必要があります。
->add('', TextType::class, array('attr'=> array('readonly' => true)))