<?php
namespace Customize\Form\Extension;
use Eccube\Form\Type\SearchProductType;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Eccube\Repository\CategoryRepository;
use Customize\Repository\MakerRepository;
use Customize\Repository\VehicleModelRepository;
use Customize\Repository\YearModelRepository;
use Customize\Repository\BrandRepository;
use Eccube\Entity\Category;
use Customize\Entity\Maker;
use Customize\Entity\VehicleModel;
use Customize\Entity\YearModel;
use Customize\Entity\Brand;
class SearchProductExtension extends AbstractTypeExtension
{
/**
* {@inheritdoc}
*/
/**
* @var MakerRepository
*/
protected $makerRepository;
/**
* @var VehicleModelRepository
*/
protected $vehicleModelRepository;
/**
* @var YearModelRepository
*/
protected $yearModelRepository;
/**
* @var BrandRepository
*/
protected $brandRepository;
/**
* @var CategoryRepository
*/
protected $categoryRepository;
/**
* ProductType constructor.
*
* @param MakerRepository $makerRepository
* @param VehicleModelRepository $vehicleModelRepository
* @param YearModelRepository $yearModelRepository
* @param BrandRepository $brandRepository
* @param CategoryRepository $categoryRepository
*/
public function __construct(
MakerRepository $makerRepository,
VehicleModelRepository $vehicleModelRepository,
YearModelRepository $yearModelRepository,
BrandRepository $brandRepository,
CategoryRepository $categoryRepository
) {
$this->makerRepository = $makerRepository;
$this->vehicleModelRepository = $vehicleModelRepository;
$this->yearModelRepository = $yearModelRepository;
$this->brandRepository = $brandRepository;
$this->categoryRepository = $categoryRepository;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
#メーカー
->add('maker_id', ChoiceType::class, [
'choice_label' => 'Name',
'choices' => $this->makerRepository->getList(null, true),
'choice_value' => function (Maker $Maker = null) {
return $Maker ? $Maker->getId() : null;
},
])
#VehicleModel
->add('vehicle_model_id', ChoiceType::class, [
'choice_label' => 'Name',
'choices' => $this->vehicleModelRepository->getList(),
'choice_value' => function (VehicleModel $VehicleModel = null) {
return $VehicleModel ? $VehicleModel->getId() : null;
},
])
#YearModel
->add('year_model_id', ChoiceType::class, [
'choice_label' => 'Name',
'choices' => $this->yearModelRepository->getList(),
'choice_value' => function (YearModel $YearModel = null) {
return $YearModel ? $YearModel->getId() : null;
},
])
#Brand
->add('brand_id', ChoiceType::class, [
'choice_label' => 'Name',
'multiple' => true,
'choices' => $this->brandRepository->getList(),
'choice_value' => function (Brand $Brand = null) {
return $Brand ? $Brand->getId() : null;
},
])
#Category
->add('category_id', ChoiceType::class, [
'choice_label' => 'Name',
'multiple' => true,
'choices' => $this->categoryRepository->getList(null, true),
'choice_value' => function (Category $Category = null) {
return $Category ? $Category->getId() : null;
},
])
;
}
/**
* {@inheritdoc}
*/
public static function getExtendedTypes(): iterable
{
return [SearchProductType::class];
}
}