Zend Framework 2 DateSelect / MonthSelect格式

时间:2013-02-03 01:36:20

标签: php zend-form zend-framework2 zend-form-element

使用新发布的Zend Framework 2版本two new form elements were added; DateSelectMonthSelect。我想使用前者,它增加了三个选择;日,月和年。但是,我有一个问题格式化输出我想要的方式 - 而且,没有这方面的文档!

我正在将表单元素添加到我的表单中(取自this page):

$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类来格式化选择。在源代码中,我注意到您在调用__invoke() predefined constants时可以使用 [link to source code]作为日期类型,如下所示:

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

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

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

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

3 个答案:

答案 0 :(得分:2)

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

说到这里,您应该能够通过访问当前的语言环境设置来创建所需的输出,并将int插入ViewHelpers __invoke()。查看ViewHelper的getLocale()意味着,未使用配置中的默认translator,因此您必须为此ViewHelper明确设置locale,但它应该可以正常运行;)

如果这对您没有预期效果,我建议您在his Blog about the new Form Features

上给Bakura留言

答案 1 :(得分:2)

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

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

"render_delimiters": false

我认为默认情况下应该是假的

答案 2 :(得分:0)

Sam提到你可以更新php.ini中的语言环境设置

例如我在php.ini中有这个

  

intl.default_locale = en_Gb

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