2016-02-04 35 views
1

在我的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, 
       )) 

} 
+0

你可以发布控制器代码 –

+0

@elkorchianas看我的编辑我写了第二个视图的控制器,我恢复了我的POST数据 –

回答

2

有一重装后恢复以前的职位数据没有直接的方法,但也有办法围绕这个问题。

  • 您可以使用会话处理程序来存储您需要挂起的数据,只需检查会话变量(如果发布数据不在预期的范围内)。 (这并不适用于你的任务,但值得一提的是,如果你想保留多个页面浏览量的帖子数据)
  • 你可以将重新加载的JavaScript更改为自己的帖子(提交),并预先选择通过选项,同时还根据需要渲染任何其他选择或选项。
  • 或者您可以使用ajax请求从服务器提取数据,只需更改表单而无需提交或重新加载页面。

对于您的应用程序,我认为ajax方法是最方便用户的,因为它不涉及整个页面重新加载。快速谷歌搜索出现了这个例子http://tutorialzine.com/2011/11/chained-ajax-selects-jquery/

如果你不想沿着那条路线走,然后我会建议改变你的JavaScript提交表单,然后检查完​​整性的形式在你的PHP代码。如果表单仍然不完整,请重新绘制表单并确保其他选择框(或其他需要的)被呈现。

相关问题