复选框列表 Symfony 4
List of checkboxes Symfony 4
我是 Symfony 4 的新手,我正在尝试在以下情况下使用搜索器创建一个复选框列表:
我有一个名为 SAI 的实体,许多用户可能 "owned" 这个实体(因此,我有一个名为 User).
我有一个控制器 AddSAIController.php,我在其中管理如何添加 SAI。当我添加它时,我想显示一个表单,用户可以在其中输入 SAI 的 serial_number 并可以检查哪些用户拥有该 SAI。问题是我的数据库中会有很多用户,我需要一个搜索器来更快地找到我想要的用户。
首先,我尝试按照 https://symfony.com/doc/current/form/form_collections.html 处的文档创建复选框列表,我已经设法向用户展示,但没有像我想要的那样使用复选框,相反,它显示它们就像输入文本类型。
Like this.
这是我的代码:
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,
));
}
现在我很乐意得到一些帮助来创建复选框,我稍后会做 seracher。
要使多个 selector 和搜索功能合而为一,您可以使用 jQuery selectbox 插件,例如 Select2。这为您提供了一个 select 字段,您可以在其中进行搜索并进行多项输入。试试这个:
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>
我是 Symfony 4 的新手,我正在尝试在以下情况下使用搜索器创建一个复选框列表:
我有一个名为 SAI 的实体,许多用户可能 "owned" 这个实体(因此,我有一个名为 User).
我有一个控制器 AddSAIController.php,我在其中管理如何添加 SAI。当我添加它时,我想显示一个表单,用户可以在其中输入 SAI 的 serial_number 并可以检查哪些用户拥有该 SAI。问题是我的数据库中会有很多用户,我需要一个搜索器来更快地找到我想要的用户。
首先,我尝试按照 https://symfony.com/doc/current/form/form_collections.html 处的文档创建复选框列表,我已经设法向用户展示,但没有像我想要的那样使用复选框,相反,它显示它们就像输入文本类型。
Like this.
这是我的代码:
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,
));
}
现在我很乐意得到一些帮助来创建复选框,我稍后会做 seracher。
要使多个 selector 和搜索功能合而为一,您可以使用 jQuery selectbox 插件,例如 Select2。这为您提供了一个 select 字段,您可以在其中进行搜索并进行多项输入。试试这个:
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>