Итак. Как всё происходило:
1. Я разбирался с кастомизацией форм в Symfony
https://symfony.com/doc/current/form/form_customization .
Дошел до таких примеров
{% block text_widget %}
<div class="form-control">
{{ block('form_widget_simple') }}
</div>
{% endblock %}
2. Так как в Symfony как всегда очень хорошая документация, я так и не смог найти что нужно указать в block('...'); чтобы у меня был input с текстом для ввода пароля. Зато там написано что все эти шаблоны хранятся по пути
FrameworkBundle/Resources/views/Form
Собственно, по этому пути я нашел файл "password_widget.html.php",
3. Ну, недолго думая, я создал такой вот код:
{% block password_widget %}
<div class="form-control">
{{ block('password_widget') }}
</div>
{% endblock %}
4. Попытался перезагрузить страницу. Что из этого вышло:
- Страница бесконечно загружается. Терпимо. Нужно искать ошибку. Но сначала попытался оставить её и посмотреть что прогрузит через пол минуты.
- Прилагаю скрин, чтобы было яснее:
Конкретно: CPU компьютера стало загружено на 100%. Когда я первый раз пытался загрузить эту страницу, она ещё и умудрилась как то забить всю оперативную память. Обычно swap у меня не используется.
Итак, пара вопросов:
1. Как сделать поле для ввода пароля
2. password_widget то где-то используется, или я залез куда не нужно?
Используется Symfony 4 и PHP 7. Систему грузит php-fpm
Upd: такой код, например, работает
{% block password_row %}
<div>
{{ block('form_label') }}
<div class="form-control">
{{ block('password_widget') }}
</div>
</div>
{% endblock %}
Класс формы(брал из документации)
UserType.php<?php
namespace App\Form;
use App\Entity\User;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('email', EmailType::class)
->add('username', TextType::class)
->add('plainPassword', RepeatedType::class, array(
'type' => PasswordType::class,
'first_options' => array('label' => 'Password'),
'second_options' => array('label' => 'Repeat Password'),
))
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => User::class,
]);
}
}
Вид:
register.html.twig{% extends 'base.html.twig' %}
{% form_theme form _self %}
{% block password_widget %}
<div class="form-control">
{{ block('password_widget') }}
</div>
{% endblock %}
{% block body %}
<div class="form-control col-md-6">
{{ form_start(form) }}
<div>
{{ form_label(form.username) }}:
{{ form_errors(form.username) }}
{{ form_widget(form.username) }}
{{ form_help(form.username) }}
</div>
{{ form_row(form.email) }}
{{ form_row(form.plainPassword.first) }}
{{ form_row(form.plainPassword.second) }}
<button type="submit">Register!</button>
{{ form_end (form) }}
</div>
{% endblock %}