在CakePHP中,如何创建表单以列出日期范围内的模型?

时间:2010-05-14 16:25:29

标签: php datetime cakephp

我有一个非常简单的模型,包括自动填充的字段,就像'created'一样。 (日期时间格式)。

如果可能的话,我想使用表单助手来验证日期字段和诸如此类的东西。

我想要一个带有“开始日期”(YMD,12小时)和“结束日期”(相同格式)的简单表格。

已经设置了控制器操作,如下所示:

function view_between($start_date = null, $end_date = null) { 
    // ... stuff that works correctly when the URL is manually entered.
}

我是否定义了控制器错误,或者如何将这些值传递给该函数?

我被卡住的原因是因为我尝试添加$form->input('my_datetime_field' ...)两次,但很明显,各个元素的名称/ ID是相同的。

我也尝试过使用$form->dateTime(...)类似的结果。

我不确定如何唯一地标识开始和结束日期选择,当它应该与单个字段交互时。

我是不是错了?向正确的方向推进就足够了。

3 个答案:

答案 0 :(得分:1)

要指定具有相同字段名称的多个表单元素,请使用以下语法:

$form->input('Modelname.0.fieldname');
$form->input('Modelname.1.fieldname');

哪个应该返回一组要使用的值。

来自:http://book.cakephp.org/view/547/Field-naming-convention

答案 1 :(得分:0)

您可以执行一个onsubmit,它形成一个附加开始/结束日期的get请求:

echo $form->create('Foos', array('onsubmit'='submitDates(this)'));

的javascript:

function submitDates(frm) {
    // grab dates from inputs, form get string and submit to form.action
    // get should be something like /controller/view_between/YYYY-MM-DD/YYYY-MM-DD
}

答案 2 :(得分:0)

提交表格时,您只能将其作为GET或POST请求提交 GET请求将以如下格式将所有表单元素附加到URL:

/controller/action?data[Model][field]=value&data[Model][field2]=value

这与Cake URL标准不符,因此您无论如何都必须进行一些URL重写或解析。

POST请求就是这样,数据将像往常一样在控制器的$this->data中结束。

无论哪种方式,您都无法直接将表单请求提供给带参数的函数。你可以使用Javascript,但我建议你不要。最好的可能是通常的POST请求。您只需重写控制器操作即可从$this->data获取数据。根据需要为表单字段命名,只需确保在控制器操作中正确使用它们。