2

我正在使用 CakePHP 2.1 并有一个日期字段来获取用户的出生日期:

例如

echo $this->Form->input('Profile.dob', array('label' => 'Date of Birth'
                                        , 'dateFormat' => 'DMY'
                                        , 'empty' => array('DATE','MONTH','YEAR')
                                        , 'minYear' => date('Y') - 110
                                        , 'maxYear' => date('Y') - 0));

如您所见,我尝试使用数组设置默认值,但这只是使它们都具有 DATE 的默认值。我如何得到它,以便每个下拉列表都具有正确的值?

4

6 回答 6

6

这有点骇人听闻而且非常丑陋,但是由于该empty选项似乎不支持多个值,因此它可能是最简单的解决方案-除非您想重写整个dateTime()函数。str_replace不幸的是,不允许限制替换的数量,这就是我们不得不求助于preg_replace.

$placeholder = '[RandomStringWhichDoesNotAppearInTheMarkup]';

$out = $this->Form->input('Profile.dob', array('label' => 'Date of Birth'
                                            , 'dateFormat' => 'DMY'
                                            , 'empty' => $placeholder
                                            , 'minYear' => date('Y') - 110
                                            , 'maxYear' => date('Y') - 0));

$escapedPlaceholder = preg_quote($placeholder, '/');
$out = preg_replace("/$escapedPlaceholder/", 'DATE', $out, 1);
$out = preg_replace("/$escapedPlaceholder/", 'MONTH', $out, 1);
$out = preg_replace("/$escapedPlaceholder/", 'YEAR', $out, 1);

echo $out;
于 2012-07-23T10:12:42.453 回答
5

您想要的功能现已实现,并将在下一个版本中提供。目前,您可以从 github 签出 master 分支以获取此补丁。检查链接提交中的测试用例以获取使用示例。如果您当前使用的是 cakephp 2.1,请阅读手册中的 2.1 到 2.2 迁移指南,因为 master 分支是 2.2 dev 分支。

于 2012-07-27T20:29:20.460 回答
4

我已经检查过它会给出相同的输出,这是必需的:此代码将生成具有给定默认值的相同下拉框,并且发布数据将相同:

echo $this->Form->day('Profile.dob', array('empty'=>'Day'));
echo $this->Form->month('Profile.dob', array('empty'=>'Month'));
echo $this->Form->year('Profile.dob', 1950, date('Y'),array('empty'=>'Year'));
于 2012-07-25T13:00:02.083 回答
3
<?php echo $this->Form->input('birth_dt', array( 'label' => 'Date of birth'
        , 'dateFormat' => 'DMY'
        , 'minYear' => date('Y') - 70
        , 'maxYear' => date('Y') - 18 ));
?>

//或者

<?php
echo $this->Form->year('Profile.dob', date('Y') - 100, date('Y') - 13, array('empty' => "YEAR"));
echo $this->Form->month('Profile.dob', array('empty' => "MONTH"));
echo $this->Form->day('Profile.dob', array('empty' => 'DAY'));
?>
于 2012-07-28T17:58:24.723 回答
3
<?php
echo $form->input('date', array(
'type'  => 'date',
'label' => 'Date',
'empty' => TRUE,
'minYear' => 2000,
'dateFormat' => 'DMY',
'maxYear' => date('Y'),
'minYear' => date('Y') - 10
# default order m/d/y

));
?>

它像魅力一样醒来

编辑:-(您可以使用简单的 jquery 代码执行此操作)如果您想要自定义日期空值,请在包含 jquery.js 的标题中添加此 jquery 脚本。

<script type="text/javascript">     

        // var valid=true;

        jQuery(document).ready( function() {

            $("#dateDay option:first").text('DAY');
            $("#dateMonth option:first").text('MONTH');
            $("#dateYear option:first").text('YEAR');


        });




</script>

在此处输入图像描述

使用您的选项字段 id 更改 id #dateDay、#dateMonth、#dateYear ....您可以自定义它,使其适用于每个 cakephp-date 字段。

于 2012-07-23T10:13:13.547 回答
0

我是这样实现的

echo $this->Form->dateTime('dob', 'DMY','', array('value'=>'1987-02-12','empty'=>false,'label'=>'','minYear'=>date('Y')-60,'maxYear'=>date('Y')-15));

'value' 属性在 cakephp 2.0 api 之后被添加并且 'selected' 被移除

2.0 更新 $selected 参数被移除

$selected 参数已从 FormHelper 中的几个方法中删除。现在所有方法都支持 $attributes['value'] 键,它应该用来代替 $selected。此更改简化了 FormHelper 方法,减少了参数的数量,并减少了 $selected 创建的重复。影响的方法是:

FormHelper::select()
FormHelper::dateTime()
FormHelper::year()
FormHelper::month()
FormHelper::day()
FormHelper::hour()
FormHelper::minute()
FormHelper::meridian()
于 2013-03-05T09:49:41.847 回答