我是Symfony框架的新手.我想创建一个如下所示的记录列表:
我需要在顶部的一些过滤器,中间的项目列表和底部的分页.列表必须支持可编辑和只读模式.在只读模式下,用户可以在编辑模式下浏览数据,他可以更新多个字段和列中的值.
因为我将制作很多这些列表,所以我想在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'));
}
...
}
Run Code Online (Sandbox Code Playgroud)
我将使用 $options 数组来提供或打开和关闭其他功能,例如搜索过滤器和分页。
为了有一个简单的界面来显示列表,例如:
{{ list(list) }}
Run Code Online (Sandbox Code Playgroud)
我创建了 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));
}
...
}
Run Code Online (Sandbox Code Playgroud)
它呈现“列表”Twig 块。我还将以同样的方式添加其他子块。此扩展提供了比“表单”块更大的反馈。
我将列表扩展注册为服务:
# 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 }
Run Code Online (Sandbox Code Playgroud)
现在我只需创建 ListType 的表单并向其传递行实体数组。
感谢Elias Van Ootegem为我指明了正确的方向。
| 归档时间: |
|
| 查看次数: |
1118 次 |
| 最近记录: |