CakePHP:具有默认值的日期字段

时间:2012-07-20 23:06:46

标签: php cakephp

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

e.g。

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。如何获得它以使每个下拉列表具有正确的值?

6 个答案:

答案 0 :(得分: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;

答案 1 :(得分:5)

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

答案 2 :(得分: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'));

答案 3 :(得分: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>

enter image description here

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

答案 4 :(得分:3)

<?php echo $this->Form->input('birth_dt', array( 'label' => 'Date of birth'
        , 'dateFormat' => 'DMY'
        , 'minYear' => date('Y') - 70
        , 'maxYear' => date('Y') - 18 ));
?>

// OR

<?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'));
?>

答案 5 :(得分:0)

我像这样实现了它

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

'value'属性已经在2.0 api的cakephp之后添加,'selected'被删除

2.0更新 已删除$ selected参数

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

FormHelper::select()
FormHelper::dateTime()
FormHelper::year()
FormHelper::month()
FormHelper::day()
FormHelper::hour()
FormHelper::minute()
FormHelper::meridian()