gre*_*emo 4 symfony-forms symfony doctrine-orm symfony-2.1
我需要自定义实体类型字段,但没有query_builder选项.我需要根据数据库级别不可用的一些信息对其进行排序(因此,不使用query_builder).
有没有办法可以对<select>窗口小部件的元素进行排序?
编辑:我的表中有parent自我关联section,其中还包含一个title属性:
+--------------+-----------+--------+
| section_id | parent_id | title |
+--------------+-----------+--------+
| 1 | NULL | Parent |
+--------------+-----------+--------+
| 2 | 1| Child |
+--------------+-----------+--------+
| 3 | 2| Nephew |
+--------------+-----------+--------+
Run Code Online (Sandbox Code Playgroud)
我想显示一个选择框,其中的项目按标题和ancerstor标题的串联排序,即:
Parent
Parent/Child
Parent/Child/nephew
Run Code Online (Sandbox Code Playgroud)
使用单个SQL select不容易实现,因此我需要一种方法来获取选项并通过此"路径"进行简单排序.
您可以通过执行以下操作对实体中的关系进行默认排序:
/**
* @ManyToMany(targetEntity="Group")
* @OrderBy({"name" = "ASC"})
**/
private $groups;
Run Code Online (Sandbox Code Playgroud)
更多信息:订购To-Many协会
如果我正确理解OP,排序只是为了显示选择的选项,以便用户受益。
向您的表单类型添加一个函数,如下所示:
public function finishView(FormView $view, FormInterface $form, array $options)
{
usort($view->children['select']->children, function(FormView $a, FormView $b) {
return strcasecmp($a->vars['value']->getFullTitle(), $b->vars['value']->getFullTitle());
});
}
Run Code Online (Sandbox Code Playgroud)
此示例假设getFullTitle()您的实体上存在一个函数,该函数可以生成用于排序比较的值。select将是选择框所基于的关系的字段名称。
5年后...
在 Symfony 4 中再次尝试我自己的解决方案,这似乎不起作用。
这是有效的解决方案:
public function finishView(FormView $view, FormInterface $form, array $options)
{
usort($view->children['select']->vars['choices'], function(ChoiceView $a, ChoiceView $b) {
return strcasecmp($a->label, $b->label);
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8396 次 |
| 最近记录: |