등록 양식을 사용자 정의할 수 있도록 일부 양식 필드는 데이터베이스 정보에서 생성되고 양식은 등록 양식에 포함됩니다.
내장된 폼의 각 필드가 입력되는 동안 어떤 이유로 나뭇가지를 사용하여 렌더링할 때 일부 형식은 url
또는 와 같은 형식 입력 number
으로 렌더링됩니다 text
.
그러나 기본 양식(nom, prenom, email, plainPassword)을 구성하는 모든 필드는 할당된 유형으로 렌더링됩니다.
코드 조각에서 볼 수 있듯이 각 입력을 올바르게 사용 form_widget
하고 form_widget
렌더링하므로 유형 처리는 Symfony에서 수행합니다.
formView
각 필드에 대해 각각 을 덤프할 때 field.vars.block_prefixes
(배열) 내 에서 입력 유형을 원래대로 찾을 수 있습니다.
예를 들어 다음은 text
입력 내용입니다 .
"block_prefixes" => array:3 [▼
0 => "form"
1 => "text"
2 => "_security_extraDataCollection_datum-30"
]
url
입력 내용 :
"block_prefixes" => array:4 [▼
0 => "form"
1 => "text"
2 => "url"
3 => "_security_extraDataCollection_datum-31"
]
그리고 number
입력 내용 :
"block_prefixes" => array:3 [▼
0 => "form"
1 => "number"
2 => "_security_extraDataCollection_datum-33"
]
처음에는 를 사용해서 그런 줄 알았는데 material-component-web
CSS가 없어도 이런 문제가 발생합니다.
이유에 어떤 생각 url
과 number
유형에 설정되어 text
나는 enbedded 양식에서 그들을 렌더링 할 때 입력?
Registration form
public function buildForm(FormBuilderInterface $builder, array $options) {
/** @var array $extraData */
$extraData=$options['extra_data'];
$builder->add('nom')
->add('prenom')
->add('email', EmailType::class)
->add('plainPassword', PasswordType::class, array(
'mapped'=>false,
'constraints'=>array(
new NotBlank(array(
'message'=>'Please enter a password',
)),
new Length(array(
'min'=>6,
'max'=>4096,
)),
),
));
if($extraData !== null && is_array($extraData) && count($extraData)) {
$builder->add('extraDataCollection', UnmappedMixedType::class, array(
'mapped'=>false,
'data'=>$extraData,
));
}
}
UnmappedMixedType form
public function buildForm(FormBuilderInterface $builder, array $options) {
/** @var array $extraData */
$extraData=$options['data'];
/** @var ExtraData $extraDatum */
foreach($extraData as $extraDatum) {
if($extraDatum->getType() == 'text') {
$builder->add('datum-'.$extraDatum->getId(), TextType::class, array(
'mapped'=>false,
'required'=>$extraDatum->getIsObligatoire(),
'label'=>$extraDatum->getLabel(),
));
} elseif($extraDatum->getType() == 'url') {
$builder->add('datum-'.$extraDatum->getId(), UrlType::class, array(
'mapped'=>false,
'required'=>$extraDatum->getIsObligatoire(),
'label'=>$extraDatum->getLabel(),
));
} elseif($extraDatum->getType() == 'number') {
$builder->add('datum-'.$extraDatum->getId(), NumberType::class, array(
'mapped'=>false,
'required'=>$extraDatum->getIsObligatoire(),
'label'=>$extraDatum->getLabel(),
));
} elseif($extraDatum->getType() == 'checkbox') {
$builder->add('datum-'.$extraDatum->getId(), CheckboxType::class, array(
'mapped'=>false,
'required'=>$extraDatum->getIsObligatoire(),
'label'=>$extraDatum->getLabel(),
));
} elseif($extraDatum->getType() == 'choice' && $extraDatum->getChoix() !== null && count($extraDatum->getChoix()) >= 1) {
$builder->add('datum-'.$extraDatum->getId(), ChoiceType::class, array(
'mapped'=>false,
'required'=>$extraDatum->getIsObligatoire(),
'label'=>$extraDatum->getLabel(),
'multiple'=>$extraDatum->getIsChoixMultipleUtilisateur(),
'choices'=>array_combine($extraDatum->getChoix(), $extraDatum->getChoix()),
));
}
}
}
Twig view
{% if form.extraDataForm is defined %}
<div class="app-auth-left-frame-extra">
<div class="app-form-container">
<div class="app-form_field-container">
{% for field in form.extraDataForm %}
{{ dump(field) }}
{% if field.vars.block_prefixes[1] == 'text' or field.vars.block_prefixes[1] == 'number' %}
<div class="mdc-text-field mdc-text-field--outlined">
{{ form_widget(field, {'attr': {'class': 'mdc-text-field__input'}}) }}
<div class="mdc-notched-outline">
<div class="mdc-notched-outline__leading"></div>
<div class="mdc-notched-outline__notch">
{{ form_label(field, null, {'label_attr': {'class': 'mdc-floating-label'}}) }}
</div>
<div class="mdc-notched-outline__trailing"></div>
</div>
</div>
{% elseif field.vars.block_prefixes[1] == 'checkbox' %}
<div class="mdc-form-field">
<div class="mdc-checkbox">
{{ form_widget(field, {'attr': {'class': 'mdc-checkbox__native-control'}}) }}
<div class="mdc-checkbox__background">
<!--suppress HtmlUnknownAttribute -->
<svg class="mdc-checkbox__checkmark" viewBox="0 0 24 24">
<path class="mdc-checkbox__checkmark-path" fill="none" d="M1.73,12.91 8.1,19.28 22.79,4.59"></path>
</svg>
</div>
</div>
{{ form_label(field, null, {'label_attr': {'class': 'app-txt-light-emphasis'}}) }}
</div>
{% elseif field.vars.block_prefixes[1] == 'choice' %}
<div>{{ form_widget(field) }}</div>
{% endif %}
{% endfor %}
</div>
</div>
</div>
{% endif %}
문서에서 말하는 UrlType 필드 :
UrlType 필드는 제출된 값에 아직 프로토콜이 없는 경우 제출된 값 앞에 지정된 프로토콜(예: http://)을 추가하는 텍스트 필드입니다.
url
유형이 있는 입력을 원하면 다음과 같이 고유한 양식 필드 유형을 작성하십시오.
class MyUrlType extends AbstractType {
/**
* {@inheritdoc}
*/
public function buildView(FormView $view, FormInterface $form, array $options)
{
$view->vars['type'] = 'url';
}
/**
* {@inheritdoc}
*/
public function getParent()
{
return __NAMESPACE__.'\TextType';
}
}
여기에서 https://symfony.com/doc/current/form/create_custom_field_type.html
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다