【问题标题】:Pass the current querystring parameters through symfony forms通过 symfony 表单传递当前查询字符串参数
【发布时间】:2013-08-29 09:39:35
【问题描述】:

我们的应用程序使用多个网络表单,其中一些只应在查询字符串中添加或更改几个参数。例如,有一个过滤器表单和一个用于列表顺序的表单(只是一个下拉菜单)。

两者都是独立的,但如果我更改一个,我必须将当前查询字符串参数与新请求一起传递。我该如何管理它?

【问题讨论】:

    标签: forms symfony


    【解决方案1】:

    这只是可能的解决方案之一,它是否对您有帮助取决于您的实施。

    <?php
    $allowedQueryParams = array('param1', 'param2', 'param3');
    // I'll fake a request here
    $request = new Request(array('param2' => 'foo', 'param3' => 'bar', 'param4' => 'dummy'));
    
    $formFactory = Forms::createFormFactoryBuilder()->getFormFactory();
    
    $formBuilder = $formFactory->createBuilder();
    $formBuilder->add('param1', 'text');
    
    $data = array();
    foreach ($allowedQueryParams as $param) {
        if ($request->query->has($param)) {
            // Add the query param as hidden field to you form
            $formBuilder->add($param, 'hidden');
            $data[$param] = $request->query->get($param);
        }
    }
    
    $formBuilder->setData($data);
    
    $form = $formBuilder->getForm();
    

    所以基本上你用当前查询参数添加隐藏字段。

    编辑: 但是,如果您有很多表单,您可能希望使用 EventSubscriber

    【讨论】:

    • 这并不容易,因为表单类必须添加所有这些字段。该表格可以与其他请求一起包含在多个页面中。另一点是,symfony 表单经常使用数组,这些结构必须通过隐藏字段保留。
    【解决方案2】:

    另一种方法是将两个表单合并为一个主表单。

    从您的控制器:

    $formData = array(
        'filterParams'    => array(), // Default filter parameters
        'listOrderParams' => array(), // Default list order parameters
    );
    $form = $this->createFormBuilder($task)
        ->add('filterParams',    new FilterFormType())
        ->add('listOrderParams', new ListOrderFormType())
        ->add('update', 'submit')
        ->getForm();
    
    $form->handleRequest($request);
    
    if ($form->isValid()) {
    
        $formData = $form->getData();
    

    【讨论】:

    • 可能是存档此目标的最佳方式。我试试看。
    • 但这不是从查询字符串中获取数据吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多