2016-02-13 50 views
3

不聲明字段類型是帶來了推斷的Symfony從驗證規則requiredmaxlength屬性的優勢,因爲這裏說明:http://symfony.com/doc/current/book/forms.html#field-type-options-guessingSymfony2字段類型猜測:什麼時候選擇<textarea>(over <input type =「text」>)?

不過,我不能找到一種方法,使Symfony的2.8.2「猜測」一個<textarea>代替<input type="text"> :-(

我最初的想法是增加了長度,但即使在validation.yml Length: max: 100000,Symfony的不爲所動,只是給了我<input type="text" maxlength="100000" />

編輯:@chalasr:我在說話ab出一個實體,其中不是映射到數據庫。對不起,沒有提到更早!

回答

4

FormBuilder通過檢查相應的屬性的映射的類型,在該實體猜測字段類型。

使用text,而不是string爲您列映射typeFormBuilder將使用一個文本,而不是輸入的。

例子:

/** 
* @ORM\Column(type="text") 
*/ 
protected $field; 

輸出與$builder->add('field');

<textarea id="entity_field" name="entity[field]" required="required"></textarea> 

欲瞭解更多信息看Symfony\Bridge\Doctrine\Form\DoctrineOrmTypeGuesser

更新

所以,您不要使用映射類。

看看FormBuilder,如您所見,如果找不到相應的Guesser,表單類型將爲TextType(輸入文本)。

否則,有3種不同的Guesser

因爲你的類沒有映射,Symfony的將使用ValidatorTypeGuesser猜測的類型你的領域。

Guesser這個Guesser尋找你的班級的約束。
例如,如果您的字段具有Type約束且類型爲integer,則將使用NumberType,並且將會呈現輸入類型number

我的第一個想法是使用Length約束與一個很大的最小長度。

但是,多次嘗試後,看起來在課堂上,似乎TextareaType永遠不會猜到了,除非你的類映射和你的領域有text類型(DoctrineTypeGuesser使用)。

所以,沒有映射類,Symfony不能從類型猜測中創建textarea

欲瞭解更多信息請登錄ValidatorTypeGuesser::guessTypeForConstraint

另請參閱Form Type Guessing文檔章節,它將展示如何創建自己的TypeGuesser並提供一個很好的示例。

相關問題