web-dev-qa-db-ja.com

symfonyフォームの読み取り専用フィールド

どのようにレンダリングすればよいですかread-only symfonyフォームコンポーネントを使用するフィールド?

これは私が無駄にそれをやろうとしている方法です:

symfony 2

$builder
    ->add('descripcion', 'text', array(
        'read_only' =>'true'
    ));
}

symfony

$builder
    ->add('descripcion', TextType::class, array(
        'read_only' => 'true'
    ));
}
14
Bicu

提供された回答はすべてSymfonyのこの例外で終わります:

Uncaught PHP Exception Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException: "オプション" read_only "は存在しません。

これを行う正しい方法は、フィールドでattrプロパティを利用することです。

->add('descripcion', TextareaType::class, array(
    'attr' => array(
        'readonly' => true,
    ),
));
22
Pmpr

文字列に読み取り専用属性を宣言しました。ブール値である必要があります。

trueの前後の引用符を削除します

このような:

->add('descripcion','text',array('read_only' => true))

引用符なしで真。

9
Andrew Atkinson

フォームフィールドを読み取り専用として提示し、フォームがリクエストの新しい値を受け入れないようにする唯一の安全な方法は次のとおりです。

$builder->add(
    'description',
    TextType::class,
    ['disabled' => true]
);

いずれかを使用することの他の提案['attr' => ['readonly' => true]]または['attr' => ['disabled' => true]]は、偽造されたリクエストに対して脆弱なままにします。

後者のオプションはどちらもフィールドにreadonlyまたはdisabled属性を設定しますが、リクエストに含まれている場合、フォームはこのフィールドの新しい値を受け入れます。

上記の最初のオプションのみがフォームフィールドを無効にし、フォームがリクエスト内のフィールドの新しい値を受け入れないようにします。

私はこれをSymfony Form 3.4でテストしました。 4が同じように動作するかどうかはわかりません。

8
Courtney Miles

read_onlyはSymfony 2.8以降廃止されました。代わりにreadonlyを使用してください。そして、この属性にブール値を提供します

->add('','text',array('readonly' => true))
5
Rinat

Symfony 4はフォームフィールドで「無効」オプションのみを使用することを許可します。ただし、「読み取り専用」とは異なります。

  • 無効-ユーザーはフィールドを編集できず、その値ISフォームの送信中には渡されません。
  • 読み取り専用-ユーザーはフィールドを編集できませんが、その値ISはフォームの送信中に渡されます。

私が「読み取り専用」で見つけた唯一の解決策は次のとおりです。

->add('fieldname', TextType::class, [
            'label' => false,
            'attr'=> [ 'readonly' => true ]
        ])
3
Kuba

更新:Symfony 3.0以降、readonly値はattrオプション。 http://symfony.com/doc/2.8/reference/forms/types/form.html#read-only

disabledオプションも代わりに使用できます。

3
mb3rnard

Entitytypeフィールドが無効の場合は正常に機能します

->add('organizacion', EntityType::class, array(
    'class' => 'AppBundle:Organizacion',
    'label' => 'Institución/Organización',
    'choice_label' => 'nombre',
    'disabled' => true
))
0
Rodol Velasco

その他の解決策は次のとおりです。

->add('value', TextType::class, ['disabled' => true]):

取得元: http://symfony.com/doc/current/reference/forms/types/text.html#disabled

0
Sergio Barbosa

ファミリアと証明者が他のエンティティとの関係である場合、それらはテキストタイプであってはいけないと思います。タイプを無効にするか、entityタイプに変更して、機能するかどうかを確認してください。

0
mrMantir

他の回答ではうまくいかなかったものを追加しましょう。フィールドとしての扱いですが、編集を無効にするための「微調整」は多くの場合に機能します。ただし、編集を完全に禁止するいくつかの形式でレンダリングする(つまり、ラベルとしてレンダリングする)ことは少なくとも困難です。

これを解決するには?私がしたことは、フィールドをHiddenTypeとして定義し、テンプレートで{{ form.vars.value.myfield }}または{{ item.myfield }}を使用してレンダリングし、「item」をエンティティオブジェクトとして、他のHTMLと同じように、何でも考えられる形で囲みます。素子。

「無効」オプションのみではエラーは発生しません

$builder
    ->add('descripcion', TextType::class, array(
        'disabled' => 'true'
    ));
}
0
makeze

提出された値はドキュメントに従って無視されるため、無効オプションの使用をお勧めします: https://symfony.com/doc/current/reference/forms/types/text.html#disabled

$builder->add('descripcion', TextType::class, [
    'disabled' => 'true',
]);
0
PJately

readonlyであり、read_onlyではありません。このオプションをattrに次のように設定する必要があります。

->add('', TextType::class, array('attr'=> array('readonly' => true)))
0
Helmi jlali