php 表单切换,php – 动态表单(切换实体)symfony2

解:

我的问题的解决方案是在控制器中创建一些额外的功能,以解决我希望能够从用户的选择中“动态”更改实体和形式的问题.

public function indexAction(Request $request)

{

$form = $this->getForm($request);

$form->handleRequest($request);

return array(

'form' => $form->createView(),

'request' => $request->request,

);

}

getForm检索表单的位置(例如,车辆的AdvertVehicleType或“默认”广告的AdvertType).

getForm方法如下所示:

private function getForm(Request $request)

{

$categoryTitle = 'NONE';

$categoryId = $request->request->get('advert', false)['category'];

if ($categoryId) {

$categoryTitle = $this->getDoctrine()->getRepository('Bundle:Category')->find($categoryId)->getTitle();

}

return $this->createForm($this->getFormType($categoryTitle), $this->getEntity($categoryTitle));

}

在这里,我检索categoryID(在请求中的表单中选择),并使用getFormType和具有getEntity的实体检索formType.

private function getEntity($categoryTitle)

{

$entity = new Advert();

switch ($categoryTitle) {

case Category::CARS:

$entity = new AdvertCar();

}

return $entity;

}

private function getFormType($categoryTitle)

{

switch ($categoryTitle) {

case Category::CARS:

return new AdvertCarType();

default:

return new AdvertType();

}

}

为了能够使用ajax“动态”更新这个(但是如果用户尝试提交表单,它也可以工作)我在控制器中创建了另一个动作.

这个动作呈现了我想要更新的表单部分(在ajax调用上),我通过实际选择表单中使用twig设置表单对象来呈现我不需要的内容,如下所示:

{% do form.title.setRendered %}

(这只是一个例子,我实际上是为所有我不想渲染的表单对象执行此操作.

然后我只是打电话:

{{ form_rest(form) }}

这将检索表单的“休息”,这对于不同的类别是不同的.

现在让我们说你有州和城镇可供选择.首先选择状态,然后在树枝中渲染该状态的城镇(但实际上你可以只渲染你需要的部分,例如{{form_row(form.towns)}},然后将这个渲染的模板作为json响应返回用jquery把它放在你想要的div中.

$html = $this->renderView('@Bundle/NewAddPage/filter_area.twig', array('form' => $form->createView()));

然后在响应中返回$html变量.

我希望这会有所帮助,并且解释是足够好的,如果不是只是发表评论,我会用我的答案更新这个!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值