管理申报表和结果页面的最佳方式

Posted

技术标签:

【中文标题】管理申报表和结果页面的最佳方式【英文标题】:Best way to manage filer form and result page 【发布时间】:2015-02-05 08:16:48 【问题描述】:

在 Symfony 中管理过滤器页面和结果页面的最佳方式是什么? 我有一个管理过滤器表单和执行查询的控制器。此查询的结果必须传入另一个控制器操作。结果必须显示在另一个控制器操作中,因为我使用了 knp_paginator。如果我在过滤器表单的相同控制器操作中呈现结果,则在更改页面时控制器显示过滤器表单而不是结果。

【问题讨论】:

我通常在一个单一的action方法中实现所有,考虑将表单过滤结果传递给GET方法以更好地处理分页。看看PUGXGeneratorBundle 是如何工作的here。使用 KNP 和 LEXIK 作为过滤器生成简单的 CRUD,然后您可以简单地使用相同的方法来满足您的需要。希望对您有所帮助。 如果你需要同样的例子,请告诉我 我花了整个下午,但我做到了。感谢您的可用性:-) 太棒了!如果您有时间,请考虑分享您的解决方案作为问题的答案 【参考方案1】:

这是我使用的方法:

创建查找表单的操作:

public function findAction(Request $request)


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

    $form->handleRequest($request);

    if(($form->isSubmitted() && !$request->isXmlHttpRequest()))
    
        if(($this->isValidFindForm($form) && $form->isValid()))
        
            $parm = $request->request->get('findForm');
            return $this->redirect($this->generateUrl('list_documents',$parm));
        
    

    return $this->render(
            'myBundle:Documents:document\document_find.html.twig',
            array('form' => $form->createView())
    );


private function createFindForm(Request $request)

    $form = $this->createForm(
                new findDocumentType(
                    $this->getDoctrine()->getManager(),
                    $request
                ),
                null,
                array(
                    'action' => $this->generateUrl('find_documents'),
                    'method' => 'POST',
                )
            );
    return $form;

我使用了 $parm = $request->request->get('findForm');获取查询字符串。 “findForm”是我的过滤器表单的名称。

重定向动作:

public function listAction(Request $request)

    $documents = $this->searchDocument($request);
    $paginator = $this->get('knp_paginator');
    $pagination = $paginator->paginate(
            $documents,
            $this->get('request')->query->get('page', 1)
    );
    return $this->render(
            'myBundle:Documents:document\document_list.html.twig',
            array('pagination' => $pagination)
    );

请求被传递给搜索函数(请求包含查询字符串) 在搜索动作中:

private function searchDocument(Request $request)

    $parm = $request->query;
    $repository = $this->getDoctrine()->getRepository('docliteBundle:Document\\document');
    $query = $repository
                ->createQueryBuilder('d');
 ....

使用 $request->query->get() 我可以访问所有参数。

希望这对某人有所帮助。

附:对于我使用的分页KNP_paginator

【讨论】:

以上是关于管理申报表和结果页面的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章

从同一页面获得不同社交共享卡的最佳方式是啥?

s-s-rS 2008r2 在报表管理器的主显示页面中截断报表描述

Cognos 使用Resport Studio 制作报表,怎样设置参数?

报表类相关测试范围总结

flying saucer 修改报表格式

为水晶报表中的页面/部分动态设置高度和宽度