php - 如何在 Symfony 中创建列表?

标签 php symfony

我是 Symfony 框架的新手。我想创建一个如下所示的记录列表:

enter image description here

我需要顶部的一些过滤器,中间的项目列表和底部的分页。列表应该支持可编辑和只读模式。在只读模式下,用户只能浏览数据,而在编辑模式下,他将能够更新多个字段和列中的值。

因为我会制作很多这样的列表,所以我想在 Symfony2 中使用像 Forms 这样的界面,而不是一直调整 twig 模板。

我是否缺少可以创建这样列表的 Symfony Forms 的某些功能?还有其他一些常见的方法来实现这个吗?你能给我一些提示,可以扩展哪些表单相关类来创建对列表的支持吗?

最佳答案

为了将 Symfony 表单转换为列表,我创建了一个新的表单类型 ListType,它接受任意嵌套的集合类型。这样我就可以创建包含各种列的列表。它看起来像:

class ListType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        if (empty($options['collection_type']) || !$options['collection_type'] instanceof AbstractType) {
            throw new \InvalidArgumentException();
        }
        $builder->add('rows', 'collection', array('type' => $options['collection_type']));
        $builder->add('save', 'submit', array('label' => 'Save'));
    }
    ...
}

我将使用 $options 数组来提供或打开和关闭其他功能,例如搜索过滤器和分页。

为了有一个简单的界面来显示列表,例如:

{{ list(list) }}

我创建了 Twig 扩展:

class ListExtension extends \Twig_Extension
{
    public function getFunctions()
    {
        return array(
            new \Twig_SimpleFunction('list', array($this, 'listFunction'), array('is_safe' => array('html'), 'needs_environment' => true))
        );
    }

    public function listFunction(\Twig_Environment $env, FormView $form)
    {
        return $env->resolveTemplate($this->defaultTemplate)->renderBlock('list', array('form' => $form));
    }
    ...
}

它呈现“列表”Twig block 。我还将以相同的方式添加其他子 block 。此扩展提供比“表单” block 更大的反馈。

我将列表扩展注册为服务:

# app/config/services.yml
services:
    my.twig.list.extension:
        class: MyBundle\Twig\Extension\ListExtension
        arguments: ["::my_theme.html.twig"]
        public: false
        tags:
            - { name: twig.extension }

现在我只需要创建我的 ListType 的一种形式并将它传递给一个行实体数组。

感谢Elias Van Ootegem为我指明了正确的方向。

关于php - 如何在 Symfony 中创建列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31652733/

相关文章:

symfony - Doctrine 2 模式更新产生 MySQL errno 150,外键约束

symfony - 最佳实践如何安排 symfony2 操作

php - 如果它有 session_start(),页面将不会加载;在里面

symfony - Doctrine2 Entity PrePersist - 更新另一个实体

php - Laravel 在 PHP 通知上破坏了整个应用程序

php - 插入变量值在插入mysql查询中换行

php - Windows 上的 Symfony2 framework.ide 设置

symfony - 将验证组设置为 symfony 2 中的嵌入表单

javascript - 使用ajax检查数据库中是否有多个字段

c# - 在 C# GUI 应用程序中将远程 Mysql 数据库同步到本地