使用 KnpPaginatorBundle 对 Symfony 表单集合进行分页

2024-03-16

like in 如何处理包含 500 多个项目的 Symfony 表单集合 https://stackoverflow.com/questions/18718952/how-to-handle-symfony-form-collection-with-500-items我有一个很大的 symfony 表单收藏。在提到的线程中,有人建议对集合使用分页。

我如何使用 knpPaginatorBundle 对这样的表单集合进行分页?

表单类型是这样的

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('myType', 'collection', array(
            'type' => new MyType(),
        ))
    ;
}

我的控制器生成一个包含集合的表单

$form = $this->createForm(new MyFormCollectionType());

然后我尝试使用分页器

$paginator = $this->get('knp_paginator');
$pagination = $paginator->paginate(
    $form['myType'],
    $request->get('page', 1),
    10
);

我认为我使用了错误的分页目标($target),symfony 表单集合中的正确目标是什么?


Symfony3 上的示例:

目录控制器

// I want to paginate products (my collection)
$products = $catalog->getProducts();   // ArrayCollection

// Pagination
$paginator  = $this->get('knp_paginator');
$pagination = $paginator->paginate($products, $request->query->getInt('page', 1), 10);

// build the form with catalog data
$form = $this->createForm(CatalogProductType::class, $catalog, array("pagination" => $pagination));

// [...]

// show page
return $this->render('catalogs/products.html.twig', array(
    'catalog'    => $catalog,
    'form'       => $form->createView(),
    'pagination' => $pagination
));

目录来自(目录产品类型)

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('products',   CollectionType::class, array(
            'entry_type'    => ProductType::class,
            'data'          => $options['pagination'],
            'allow_add'     => true,
            'allow_delete'  => true,
            'prototype'     => true,
            'label'         => false,
            'by_reference'  => false
        ))
        ->add('save', SubmitType::class, array(
            'attr'    => array('class' => 'button-link save'),
            'label'   => 'Validate'
        ))
    ;
}

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class'    => 'AppBundle\Entity\Catalog',
        'pagination'    => null    // Don't forget this !
    ));
}

我的观点(products.html.twig)

<div class="navigation">{{ knp_pagination_render(pagination) }}</div>

{% if pagination.getTotalItemCount > 0 %}
    {% for widget in form.products.children %}
        {# Refers to a Twig macro #}
        {{ _self.prototype_product(widget) }}
    {% endfor %}
{% else %}
    <div class="error">The is no product in this catalog</div>
{% endif %}

我的产品集合现已分页。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 KnpPaginatorBundle 对 Symfony 表单集合进行分页 的相关文章

  • 不需要 UserProvider 的自定义身份验证

    我在网上寻找适合我的配置的解决方案 但找不到满足我需求的东西 到目前为止 我已经为此工作了整整三天 但我无法使其正常工作 我确信有几件事我不明白 我正在分支 2 1 上开发我的 symfony 应用程序 为了让这个简短 我有一个网络服务 我
  • 使用 JMS Serializer 将 XML 反序列化为具有嵌套节点的实体

    我想使用 JMS Serializer 将 XML 文件反序列化为实体 它对于直接属性非常有效 但是当涉及到嵌套属性时 如果不创建相关实体 我就无法使其工作 例如
  • Doctrine/Symfony 如何使用数组中的特定数据更新实体

    我环顾四周太久了 但没有运气 我的情况是 我有一个有点大的表 60 列 在 Doctrine Entity 中表示 在 FosREST 上工作 我想要实现的是 我想发送带有特定数据的 JSON 例如 phone gt new phone n
  • 当有效的 django 表单保存在数据库中时如何触发自定义 python 代码

    Django 新手 我创建了一个简单的表单如下this https www youtube com watch v 3XOS UpJirU教程 我的表单正确地将数据保存在我的 Postgres 连接的本地数据库中 我想知道 每当将有效表单保
  • 将文本字段输入限制为仅数字

    我搜索过谷歌 但我能找到的所有解决方案都非常复杂和冗长 我需要的是将我正在进行的调查中的文本字段的输入限制为仅数字 最快 最干净的方法是什么 我使用的是严格的 HTML 4 01 和 ECMAScript 提前致谢 最快
  • 使用 Javascript 提交表单

    我的一些表单是用Javascript JQuery提交的 所以不会发生页面刷新 但我注意到我的两台计算机之间的浏览器存在奇怪的行为 在一台计算机 以及我测试过的所有浏览器 上 我的表单提交按预期执行 我的另一台电脑 Mac 时好时坏 我将提
  • 如何从symfony2中的表单对象获取每个字段的错误消息?

    我按照这个教程http symfony com doc current forms html http symfony com doc current forms html我完美地呈现了我的插入表单 但只有一个问题我无法解决 当表单无效时
  • 如何从Entity中postLoad的LifecycleEventArgs获取Container对象?

    我正在尝试使用以下方法将容器对象 在控制器中可用 注入到实体中postLoad lifecycleCallbacks 论点postLoad方法是LifecycleEventArgs 我可以看到容器属性 我想检索 EventManager o
  • Symfony2 -> Twig -> 表单 -> 字段 -> 设置渲染 = true

    我有一个简单的问题 我有一个带有字段的表单 例如 builder gt add x gt add y gt add z 在我的树枝文件中 我使用了多个块 并且我想停止渲染字段 我查看了 b html twig 文件 a html twig
  • 当表单操作转到第三方网站时将数据传递到“谢谢”页面

    我有一个网络表单 它收集用户的邮政编码作为字段之一并将其发布到第三方网站
  • 我如何解决语义错误:“类没有名为..”的关联

    我正在关注 symblog symfony2 教程的第 5 部分 http tutorial symblog co uk docs customising the view more with twig html 标题下 主页 博客和评论
  • Android 动态添加联系表单

    Hi 我想实现如图所示的表单 不知道他们如何动态添加字段 这是列表视图吗 可扩展列表 用户可以在运行时添加和删除 我已经检查了包含子项目的可扩展列表 但我们在数组中定义子元素 在图像中它们动态添加 任何指南 链接 Thanks Custom
  • Angular 2.0 是否有类似于 Angular 1 中的 `$setPristine` 函数?

    提交表格后 pristine输入的状态仍然是 假 我不知道如何重置pristine陈述为真 在 Angular 1 中 我会使用 setPristine功能 我查看了 API 和开发人员指南 没有 API 可以将输入重置为原始状态 Inst
  • .js.erb VS .js

    将 Rails 应用程序的 javascript 放入 js erb 文件而不只是将其放入 application js 文件有什么好处 我有一个企业创建按钮 因此我应该将代码放入 create js erb 文件中 还是使用以下方法将其放
  • Mink 不适用于 behat 3.0.12

    我安装了 Behat Mink 和其他一些相关的软件包 这是我的composer json 文件 require behat behat 3 0 6 behat symfony2 extension dev master behat min
  • 如何使用 D3 (或只是 javascript)将表单选项设置为“选择”

    有没有一种方法可以搜索选择表单元素中的所有选项 并将具有匹配值的选项指定为 已选择 var xStat G var statOptions Points PTS Goals G Assists A Penalty Minutes PIM c
  • 表单未使用 AJAX 提交

    再次更新 如果有人关心的话 我之前发布的解决方案由于某种原因停止工作 我在 ajax 请求中包含了 beforeSend 并将验证表单的 js 部分粘贴到其中 现在就像一个魅力 form on submit function e e pre
  • Symfony 4.1 组件 - 依赖注入问题

    我正在用 PHP 重构旧应用程序 我正在尝试使用 Symfony 依赖注入组件将服务注入控制器 或其他服务 但我不知道如何实现这一点 因为 symphony 文档比框架组件更适合使用框架 我已经有了自己的内核 包含所有服务和控制器的容器 控
  • 强制 PayPal 始终请求信用卡信息而不是登录表单?

    我们的网站采用贝宝付款标准 当用户在我们的网站上填写他们的请求并按下 PayPal 按钮 立即购买 时 我们会将所有变量提交给 PayPal 以便他们可以处理付款 对于那些以前从未使用过贝宝并通过我们的网站付款的用户来说 它运行得非常好 因
  • 使用 PHP 将表单数据发送/发布到 URL [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有一个通过 POST 提交的表单 提交表单后我捕获变量 如何连接表单数据 然后将其 POST 到 url 然后重新定向到感谢页面 这不是确

随机推荐