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

CakePHP:具有默认值的日期字段,php,cakephp,Php,Cakephp,我使用的是CakePHP 2.1,有一个日期字段来获取用户的出生日期: e、 g 如您所见,我尝试使用数组设置默认值,但它只是使它们都具有默认值DATE。如何获得它,使每个下拉列表都有正确的值?这有点麻烦,而且相当难看,但由于空选项似乎不支持多个值,这可能是最简单的解决方案-除非您想重写整个dateTime()函数str_replace不幸的是不允许限制替换的数量,这就是为什么我们必须求助于preg_replace $placeholder = '[RandomStringWhichDoesNo

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

e、 g


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

这有点麻烦,而且相当难看,但由于
选项似乎不支持多个值,这可能是最简单的解决方案-除非您想重写整个
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;

它有着令人惊叹的魅力

编辑:-(您可以使用简单的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>

//var valid=true;
jQuery(文档).ready(函数(){
$(“#日期选项:第一”).text('DAY');
$(“#dateMonth选项:first”).text('MONTH');
$(“#日期年选项:第一”).text('YEAR');
});


使用选项字段id更改id#dateDay、#dateMonth、#dateYear……您可以自定义此选项,使其适用于每个cakephp日期字段。

我已选中此选项,它将提供所需的相同输出: 此代码将生成具有给定默认值的相同下拉框,并且post数据将相同:

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

您想要的功能现在已经提供,将在下一版本中提供。目前,您可以从github签出主分支以获得此修补程序。检查链接提交中的测试用例以了解用法示例。如果您当前正在使用cakephp 2.1,请阅读手册上的2.1到2.2迁移指南,因为主分支是2.2开发分支。


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


我是这样实现的

echo $this->Form->dateTime('dob', 'DMY','', array('value'=>'1987-02-12','empty'=>false,'label'=>'','minYear'=>date('Y')-60,'maxYear'=>date('Y')-15));
在cakephp的2.0 api之后添加了“value”属性,并删除了“selected”

2.0更新 $selected参数已删除

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

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

如果不黑客攻击源代码,那么从这个角度来看,这似乎是不可能的。您可以在输出前操作返回的标记并替换占位符。空选项标签与默认值不同。并且可以为每个日期/日期时间选择列表设置单独的默认值和空标签。使用
参数设置默认值。可以分别使用
FormHelper::day()
FormHelper::month()
FormHelper::year()
设置单独的空标签。我将OPs问题解释为是否可以添加默认提示值(本例中为空值)-在这种情况下,每个下拉列表都不同。您可以通过简单的jquery infact@mogelbrod:)是的,这确实是可能的,但是使用客户端JS来修复CakePHP中的一个缺点可能并不总是首选:)因为
空的
占位符字符串将作为选项插入每个(所有三个)下拉列表中,您只需逐个替换占位符文本(使用
preg\u replace
)与你想要的文本。绝对是最好的选择,如果你是在摆脱了丑陋的黑客在你的代码
<?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'));
?>
echo $this->Form->dateTime('dob', 'DMY','', array('value'=>'1987-02-12','empty'=>false,'label'=>'','minYear'=>date('Y')-60,'maxYear'=>date('Y')-15));
FormHelper::select()
FormHelper::dateTime()
FormHelper::year()
FormHelper::month()
FormHelper::day()
FormHelper::hour()
FormHelper::minute()
FormHelper::meridian()