有点恐慌 - 我正在为复杂的搜索生成 Symfony 表单,即映射到实体的数据将仅用于搜索查询构建。
我从 ChoiceType 创建了简单的表单、模型和一些扩展类型,用于通过某种逻辑进行预填充选择。表单是通过 GET 方法提交的。
例如,在模型中您可以找到maker和model字段。选择 maker 后,后者使用 AJAX 填充到前端。当我提交表单maker并且model具有非默认值时,handleRequest仅填充maker模型的属性,但model保留为空。如果选中,复选框也会正确填充。总而言之,$form->getData()只返回 Maker 和复选框,其他字段为空。$request->query有所有参数。
数据映射器在这里毫无意义。而且数据中没有什么可以转换的,模型主要来自标量值。请求包含所有内容,但未正确处理。我试图实现ChoiceLoaderInterface,但这对我不起作用,因为在加载选择期间我必须有权访问options表单的 ,而我没有(我使用了这篇文章https://speakerdeck.com/heahdude/symfony -forms-use-cases-and-optimization)。
我正在使用 Symfony 4.2.4;PHP 7.2。
控制器的方法
/**
* @Route("/search/car", name="car_search", methods={"GET"})
* @param Request $request
*/
public function carSearchAction(Request $request)
{
$carModel = new CarSimpleSearchModel();
$form = $this->createForm(CarSimpleSearchType::class, $carModel);
$form->handleRequest($request);
$form->getData();
.....
}
汽车简单搜索模型
class CarSimpleSearchModel
{
public $maker;
public $model;
public $priceFrom;
public $priceTo;
public $yearFrom;
public $yearTo;
public $isCompanyOwner;
public $isPrivateOwners;
public $isRoublePrice;
}
CarSimpleSearchType 表单
class CarSimpleSearchType extends AbstractType
{
protected $urlGenerator;
public function __construct(UrlGeneratorInterface $urlGenerator)
{
$this->urlGenerator = $urlGenerator;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('vehicle_type', HiddenType::class, [
'data' => VehicleTypeType::CAR,
'mapped' => false,
])
->add('maker', CarMakerSelectType::class)
->add('model', CarModelsSelectType::class)
->add(
'priceFrom',
VehiclePriceRangeType::class,
[
'vehicle_type' => VehicleTypeType::CAR,
]
)
慕丝7291255