6

随着新发布的 Zend Framework 2 版本,添加了两个新的表单元素DateSelectMonthSelect。我想使用前者,它增加了三个选择;日、月、年。但是,我在按我想要的方式格式化输出时遇到问题 - 而且,没有这方面的文档!

我正在将表单元素添加到我的表单中(取自此页面):

$this->add(array(
    'type'    => 'Zend\Form\Element\DateSelect',
    'name'    => 'birthDate',
    'options' => array(
        'label'               => 'Date',
        'create_empty_option' => true,
        'day_attributes'      => array(
            'data-placeholder' => 'Day',
            'style'            => 'width: 20%',
        ),
        'month_attributes'    => array(
            'data-placeholder' => 'Month',
            'style'            => 'width: 20%',
        ),
        'year_attributes'     => array(
            'data-placeholder' => 'Year',
            'style'            => 'width: 20%',
        )
    )
));

对于输出,我这样做:

echo $this->formDateSelect($form->get('birthDate'));

问题是我不知道如何控制选择的格式。例如,它们当前以这种形式输出:[month] [day], [year]. 我想改变两件事;首先,我想切换日期和月份,其次,我想摆脱逗号。

助手使用IntlDateFormatter类来格式化选择。在源代码中,我注意到您可以在调用[link to source code]时为日期类型使用预定义的常量,如下所示:__invoke()

echo $this->formDateSelect($form->get('birthDate'), IntlDateFormatter::SHORT);

尝试了所有常量后,我仍然无法获得我想要的格式。

我注意到三个选择都有 getter,但是formSelect对它们中的每一个都使用视图助手,因为数据填充在新的视图助手中,所以会呈现空选择。所以这几乎违背了单独使用选择的目的;那么我不妨只使用常规选择。

有谁知道如何更好地控制我的选择的格式?是否有可能没有太多麻烦,或者我应该只使用三个常规选择以获得最大的灵活性?

4

3 回答 3

2

的格式ViewHelper$this->formDateSelect($element, $intlFormat, $locale).

话虽如此,您应该能够通过访问当前的语言环境设置并将 int 插入 ViewHelpers 来创建所需的输出__invoke()。看到getLocale()ViewHelper 意味着translator不使用配置中的默认值,因此您必须locale为此 ViewHelper 显式设置一个,但它应该可以正常工作;)

如果这对您来说不起作用,我可能会建议您在 Bakura 的博客上发布有关新表单功能的消息

于 2013-02-03T12:09:15.467 回答
2

我不知道为什么有人想在输出日期时在 Select DOM 元素之间放一个随机逗号......你能用它做什么呢?

要删除逗号和任何其他分隔符,您可以通过选项传入:

"render_delimiters": false

我认为默认情况下应该是错误的

于 2013-05-29T08:32:31.927 回答
0

正如 Sam 提到的,您可以只更新 php.ini 中的语言环境设置

例如,我的 php.ini 中有这个

intl.default_locale = en_Gb

这会将 DateSelect 元素格式化为我的英国项目所需的日/月/年格式。

于 2014-12-16T16:46:58.480 回答