【发布时间】:2018-04-06 23:09:47
【问题描述】:
假设我们想在 Symfony 中构建一个简单的 cms 应用程序,我们将编写功能来“整理”帖子,然后我们将使用 twig 和 css 以自定义格式显示该数据,这样看起来为了吸引我们的用户,显然我们必须通过添加搜索功能来轻松查找特定帖子。
所以我们使用表单类来创建搜索表单,以便我们以后可以重用该表单:
<?php
namespace App\Form;
use App\Entity\Post;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints\Type;
use Symfony\Component\Form\Extension\Core\Type\SearchType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
class SearchForm extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('search_texfield', SearchType::class, array(
'attr' => array(
'placeholder' => 'Search ...',
),
'label' => false,
))
->add('search_button', SubmitType::class, array(
'label' => 'Search',
));
}
}
?>
我面临的问题是我必须为每个控制器创建相同的表单,[主控制器,结果控制器,一些控制器......],基本上用户有权访问的每个视图都必须具有搜索功能或Symfony 将启动 $search_form 基本上没有定义,因为包含搜索表单的标题与所有视图共享,因为它们都扩展了 base.layout.twig 所以下一个代码块在每个视图中重复。
$search_form = $this->createForm(SearchForm::class);
return $this->render('some.view.twig', [
'search_form' => $search_form->createView(),
...
]);
有什么方法可以共享此表单而不必为每个控制器定义它?
【问题讨论】:
-
您想在每个页面上搜索相同的内容吗?例如,每个页面都允许搜索包含一些文本的帖子。
标签: forms symfony views controllers