在我的Symfony项目中,我有一个从窗体中恢复发布数据的视图。重新加载一个页面,但保留初始发布后的数据选择新的选择
在该视图中我有这样的选择标签:
<select id="selectedChoice" name="form[selectedChoice]">
<option value="{{ slug }}" selected>value1</option> <!-- first choice I made before on the first form -->
<option disabled="disabled">-------------------</option>
<option value="{{ slug }}">value2</option>
</select>
其实我填充这个选择按照当前POST数据动态查询。
但是,如果我选择另一个值,页面必须刷新,但必须重新考虑所选的动态值,也就是说我恢复的初始POST数据必须考虑新的选择。
为了更好地解释: 最初的POST数据来自于这样一个表格 我有一个选择填充产品类别,日期和位置。我提交表单并将它重定向到需要恢复这些数据的页面上。现在是这种情况。
但其他页面的选择与第一个e-g产品类别相同。如果这个值改变了,所有的请求都会改变,我必须考虑这一点。
例如: 我的拳头形式:
<select name="productCategory">
<option value="" disabled selected>Choose a category</option>
{% for currentCategory in arrayCategory %}
<option value="{{ path('product_by_choice', {'slug': currentCategory.slug}) }}">{{ currentCategory.name }}</option>
{% endfor %}
</select>
<input type="text" id="zipCode" name="location"/>
<input type="text" id="datetimepicker" name="deliveryDate">
<button type="submit"><b>Ask for product</b></button>
因此,大家可以看到,我把这个初始踵并将其重定向我到另一个地方我poulate一些字段(例如选择选择与与第一次选择的类别映射的产品)
如果我在新页面中更改我的选择,如何恢复相同的数据,但是遵循新的选择。
我的JavaScript看起来像这样现在:
$('#selectedChoice').change(function() {
window.location.reload(Routing.generate('product_by_choice', {slug: $(this).val()}));
});
我的控制器看起来像这样:
public function quoteRequestByProductAction(Request $request, $slug, $session = null)
{
// recover the session
$session = $request->getSession();
// recover data from previous form
$location = $request->request->get('location');
$deliveryDate = $request->request->get('deliveryDate');
$productCategory = $em->getRepository('MyBundle:ProductCategory')->findOneBySlug($slug);
$arrayProduct = $em->getRepository('MyBundle:Product')->findByCategory($productCategory);
$newProduct = new Product;
$form = $this->createForm(new ProductType(), $newProduct);
->add('productCategory', 'entity', array(
'required' => true,
'class' => 'MyBundle:ProductCategory',
'property' => 'name',
'choice_value' => 'slug',
'choices_as_values' => true,
'multiple' => false,
'preferred_choices' => array($productCategory),
))
->add('product', 'entity', array(
'required' => true,
'class' => 'MyBundle:Product',
'property' => 'name',
'choice_value' => 'slug',
'choices' => $arrayProduct,
'choices_as_values' => true,
'multiple' => false,
'mapped' => true,
))
}
你可以发布控制器代码 –
@elkorchianas看我的编辑我写了第二个视图的控制器,我恢复了我的POST数据 –