将 Symfony2 与 Sonata 一起使用,在列表中,字段模板可以被覆盖并将变量分配给模板,即 setTemplateVar(),有时会很有用!(不是在谈论“attr”用于此目的的形式,而是列出......)
我想知道在 configureListFields 方法中将变量传递给为 listmapper 的给定字段定义的模板的最佳方法是什么?
<?php
namespace Acme\AcmeBundle\Admin;
use Sonata\AdminBundle\Admin\Admin;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Validator\ErrorElement;
use Sonata\AdminBundle\Form\FormMapper;
class AcmeAdmin extends Admin
{
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->addIdentifier('acme_field')
->add('date', 'date', array(
'template' => "AcmeBundle:CRUD:list_date.html.twig",
// 'dateFormat' => "Y-m-d",// ---> how to pass this var to twig ?
))
->add('_action', 'actions', array(
'actions' => array(
'edit' => array(),
'delete' => array(),
),
))
;
}
已使用 twig 模板实现了翻译和格式化日期的特定问题的解决方案,如下所示:
{% block field%}
{% if value is empty %}
{% else %}
{# retrieving the dateFormat variable from the listmapper #}
{% if dateFormat is defined %}
{{ value|date(dateFormat)|title }}
{% else %}
{{ value|date('m / Y') }}
{% endif %}
{# passing the locale in some way here would be great, it is not available in twig.. #}
{# scratch that, it is not necessary with intl.extension... #}
{% if locale is defined %}
{% set dflt_locale = locale %}
{% else %}
{% set dflt_locale = 'fr_FR.UTF-8' %}
{% endif %}
{{ value|localizeddate('medium', 'none', dflt_locale)|title }}
{% endif %}
{% endblock %}
但是,我的目标是能够从 listmapper 那里检索一个变量。
在提出的示例中, dateFormat 将是一个很好的传递...
关于语言环境的问题实际上很好,因为我意识到它不需要传递给本地化日期......它已经可以通过 intl 扩展获得。
以下帖子答案使我得出这个结论,因为我无法定义语言环境,但通过不添加参数,它已解决! 使用 Symfony 2 本地化树枝中的日期, 因此:
{{ value|localizeddate('medium', 'none')|title }}
提前为与 dateFormat 参数相关的任何响应干杯!
文兹