<?php
namespace Plugin\Recipe\Form\Type;
use Doctrine\ORM\EntityManagerInterface;
use Plugin\Recipe\Repository\CategoryRepository;
use Plugin\Recipe\Repository\MaterialRepository;
use Plugin\Recipe\Repository\TagRepository;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\SearchType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class SearchRecipeType extends AbstractType
{
/**
* @var CategoryRepository
*/
protected $categoryRepository;
/**
* @var TagRepository
*/
protected $tagRepository;
/**
* @var MaterialRepository
*/
protected $materialRepository;
/**
* @var EntityManagerInterface
*/
protected $entityManager;
/**
* SearchRecipeType constructor.
*
* @param CategoryRepository $categoryRepository
*/
public function __construct(
CategoryRepository $categoryRepository,
TagRepository $tagRepository,
MaterialRepository $materialRepository,
EntityManagerInterface $entityManager
)
{
$this->categoryRepository = $categoryRepository;
$this->tagRepository = $tagRepository;
$this->materialRepository = $materialRepository;
$this->entityManager = $entityManager;
}
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$Categories = $this->categoryRepository
->getList(null, true);
$Tags = $this->tagRepository
->getList(null, true);
$Materials = $this->materialRepository
->getList(null, true);
$builder->add('mode', HiddenType::class, [
'data' => 'search',
]);
$builder->add('category_id', EntityType::class, [
'class' => 'Plugin\Recipe\Entity\Category',
'choice_label' => 'name',
'choices' => $Categories,
'required' => false,
]);
$builder->add('tag_id', EntityType::class, [
'class' => 'Plugin\Recipe\Entity\tag',
'choice_label' => 'name',
'choices' => $Tags,
'required' => false,
]);
$builder->add('material_id', EntityType::class, [
'class' => 'Plugin\Recipe\Entity\material',
'choice_label' => 'name',
'choices' => $Materials,
'required' => false,
]);
$builder->add('name', SearchType::class, [
'required' => false,
'attr' => [
'maxlength' => 50,
'placeholder' => '料理名・食材でレシピを検索',
],
]);
$builder->add('pageno', HiddenType::class, []);
}
/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'csrf_protection' => false,
'allow_extra_fields' => true,
]);
}
/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'search_recipe';
}
}