2016-10-24 12 views
0

私は1つのオプションフィールド(remark)を持つフォームを持っています。デフォルトでは、すべて必須フィールドです。私は 'remark'フィールドをオプションにしたいと思っていました。私は多くのソリューションを試しました。誰も働いていないようです。どうしたらいいですか?ここでSymfony 3:TextareaTypeフィールドを任意に設定する

は私のコードは

RequestItem.php

/** 
* RequestItem 
* 
* @ORM\Table(name="request_item") 
* @ORM\Entity(repositoryClass="InventoryBundle\Repository\RequestItemRepository") 
*/ 
class RequestItem 
{ 
    /** 
    * @var string 
    * 
    * @ORM\Column(name="remark", type="text", nullable=true) 
    */ 
    private $remark; 

RequestItemType.php

class RequestItemType extends AbstractType 
{ 
    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('item', EntityType::class, array(
       'class' => 'InventoryBundle:Item', 
       'choice_label' => 'name', 
       'expanded' => false, 
       'multiple' => false, 
      ), 
       array('attr' =>array('class' =>'form-control', 'style' =>'margin-bottom:15px; width:100px'))) 
      ->add('date', DateType::class, array('attr' =>array('class' =>'form-control', 'style' =>'margin-bottom:15px'))) 
      ->add('quantity', TextType::class,array('attr' =>array('class' =>'form-control', 'style' =>'margin-bottom:15px; width:75px'))) 
      ->add('client', TextType::class,array('attr' =>array('class' =>'form-control', 'style' =>'margin-bottom:15px; width:200px'))) 
      ->add('remark', TextareaType::class, array('attr' =>array('class' =>'form-control', 'style' =>'margin-bottom:15px', 'required' => false), 'empty_data' => null)) 
     ; 
    } 

である私は、発言欄に '必要' =>偽を置きます。小枝ファイルに:

new.html.twig

{% extends 'base.html.twig' %} 

{% form_theme form _self %} 

{% use 'form_div_layout.html.twig' with form_label as base_form_label %} 
{% block form_label %} 
    {{ block('base_form_label') }} 
    {% if required %} 
     <span class="required" title="This field is required" style="color:red">*</span> 
    {% endif %} 
{% endblock %} 

{% block body %} 
    <h1>Request Item creation</h1> 
    {% if is_granted("ROLE_SUPER_ADMIN") %} 

    {% if app.session.flashBag.has('warning') %} 
     <div class="alert alert-danger" role="alert"> 
      {% for msg in app.session.flashBag.get('warning') %} 
       {{ msg }} 
      {% endfor %} 
     </div> 
    {% endif %} 

    {{ form_start(form) }} 
     {{ form_widget(form) }} 
     {{ form_row(form.remark, {'required': false}) }} 
     <input type="submit" value="Create" class="btn btn-primary" /> 
    {{ form_end(form) }} 

    <hr /> 
    <a href="{{ path('requestitem_index') }}" class="btn btn-success">Back to the list</a> 
    {% else %} 
     <h4>Please <a href="{{ path('fos_user_security_login') }}" class="btn btn-default">login</a></h4> 
    {% endif %} 
{% endblock %} 

Iは{} {form_row(偽} form.remark、{ '必要')}を加えます。

テキストエリアのフィールドが必要とされて

<div> <label for="request_item_remark" class="required">Remark</label> 
      <span class="required" title="This field is required" style="color:red">*</span> 
    <textarea id="request_item_remark" name="request_item[remark]" required="required" class="form-control" style="margin-bottom:15px" ></textarea></div> 

発言フィールドのページのソースビュー。

私もそれは奇妙である

new.html.twigファイルに
{% extends 'base.html.twig' %} 

{% form_theme form _self %} 

{% block textarea_widget %} 
    <div class="textarea_widget"> 
    {% set required=required|default('not required') %} 
    {{ block('form_widget_simple') }} 
    </div> 
{% endblock %} 

を追加することで試してみましたが、TEXTAREAフィールドが入力テキストフィールドになり、それはまだ必要とされます。

<div> <label for="request_item_remark" class="required">Remark</label> 
      <span class="required" title="This field is required" style="color:red">*</span> 
     <div class="textarea_widget"> 
     <input type="text" id="request_item_remark" name="request_item[remark]" required="required" class="form-control" style="margin-bottom:15px" /> 
    </div> 

テーブル構造

CREATE TABLE `request_item` (
    `id` int(11) NOT NULL, 
    `item_id` int(11) DEFAULT NULL, 
    `date` date NOT NULL, 
    `quantity` int(11) NOT NULL, 
    `client` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `remark` longtext COLLATE utf8_unicode_ci 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 
+0

データベース構造体 'php app/console doctrine:schema:update --force'を更新するコマンドを試しましたか? – Noman

答えて

1

attrrequiredを置かないでください、それはオプションでトップレベルにする必要があります。

... 
->add('remark', TextareaType::class, array('required' => false, 'attr' =>array('class' =>'form-control', 'style' =>'margin-bottom:15px'), 'empty_data' => null)) 
... 

そうでなければ、属性で必要なこの要素を設定すると、requiredオプションには意味がありません。

+0

これは機能しています。どうもありがとうございました。しかし、私はまだ私が小枝ファイルに入れたコードが動作しないことを理解していない。 – Eskinder

+0

私の回答を更新しました –

関連する問題