【问题标题】:Zend Framework 2 DateSelect/MonthSelect formattingZend Framework 2 DateSelect/MonthSelect 格式
【发布时间】:2013-02-03 01:36:20
【问题描述】:

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

我正在像这样将表单元素添加到我的表单中(取自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() [link to source code] 时可以使用predefined constants 作为日期类型,如下所示:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    如果这对您来说不起作用,我建议您在 his Blog about the new Form Features 上给 Bakura 留言

    【讨论】:

    • 我只是假设它使用了我的配置中的语言环境,所以我把它省略了。更改语言环境,它并不总是给我想要的东西(例如,对于我的国家,它给了我一种我不喜欢的格式)。但是,我很幸运,对于我的目标语言,格式正是我想要的!我确实喜欢这样:echo $this->formDateSelect($this->form->get('birthDate'), IntlDateFormatter::LONG, 'ro_RO');。非常感谢您的回答 - 非常感谢!
    【解决方案2】:

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

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

    "render_delimiters": false
    

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

    【讨论】:

      【解决方案3】:

      正如 Sam 所说,您可以在 php.ini 中更新语言环境设置

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

      intl.default_locale = en_Gb

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

      【讨论】:

        猜你喜欢
        • 2013-11-19
        • 1970-01-01
        • 2013-03-26
        • 2015-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-07
        • 1970-01-01
        相关资源
        最近更新 更多