Список флажков Symfony 4 - PullRequest
0 голосов
/ 04 июля 2018

Я новичок в Symfony 4 и пытаюсь создать список флажков с помощью поисковика в следующей ситуации:

У меня есть сущность с именем SAI , и эта сущность может «принадлежать» многим пользователям (поэтому у меня есть сущность с именем Пользователь ).
У меня есть контроллер AddSAIController.php , где я управляю, как добавить SAI. И когда я добавляю его, я хочу отобразить форму, в которой пользователь может ввести serial_number SAI и проверить, какие пользователи владеют этим SAI. Проблема в том, что у меня будет много пользователей в базе данных, и мне нужен поисковик, чтобы быстрее найти нужных пользователей.

Прежде всего я попытался создать список флажков, следуя документации на https://symfony.com/doc/current/form/form_collections.html, Мне удалось показать пользователей, но не с флажками, как я хотел, вместо этого он показывает их как ввод тип текста. Вот так.
Это мой код:

add_sais.html.twig

{%  block body %}

<div class="main">
    <h1>Add SAI</h1>
    <hr>
    <div class="formUsers">
        {{ form_start(form) }}
        {% for user in form.users %}
            {{ form_row(user.username) }}
        {% endfor %}
        {{ form_end(form) }}
    </div>
</div>

{%  endblock %}

AddSAIsController.php

public function addSAI(Request $request)
{
    $sai = new SAI();
    $users = $this->getDoctrine()->getRepository(User::class)->findAll();
    $sai->setUsers($users); 
    $form = $this->createForm(SAIType::class,$sai);
    $form->handleRequest($request);

    return $this->render('management/add_sais.html.twig', array(
        'form' => $form->createView(),
    ));
}

UsersType.php

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('username');
}

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => User::class,
    ));
}

SAIType.php

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('serial_number');
    $builder->add('users', CollectionType::class, array(
        'entry_type' => UsersType::class,
        'entry_options' => array('label' => false),
    ));
}

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => SAI::class,
    ));
}

Пока я был бы рад некоторой помощи в создании флажков, я сделаю поиск позже.

1 Ответ

0 голосов
/ 04 июля 2018

То, что вы можете сделать, чтобы иметь множественный селектор и функцию поиска в одном, - это использовать плагин jQuery selectbox, например, Select2. Это дает вам поле выбора, где вы можете искать и иметь несколько входов. Попробуйте это:

SAIType.php

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('serial_number')
            ->add('users', EntityType::class, array(
                'label' => false,
                'class' => User::class,
                'multiple' => true,
                'attr' => ['data-select' => 'true']
    ));
}

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => SAI::class,
    ));
}

Затем на странице, которую вы хотите использовать (или просто введите в base.html.twig):

CSS

<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/css/select2.min.css" rel="stylesheet" />

Javascript

<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.min.js"></script>
    <script>
    $('select[data-select="true"]').select2({});
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...