2010-05-14 34 views
0

我有一个非常简单的模型,其中包含非常像'created'的自动填充字段。 (日期时间格式)。在CakePHP中,如何创建表单以在日期范围内列出模型?

如果可能,我想使用表单助手来验证日期字段和内容。

我想要一个带有“开始日期”(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(...)以类似的结果。

我不知道如何唯一标识开始和结束日期选择,它应该与单个字段进行交互。

我是否在谈论这个错误?一种正确的方向应该足够了。

回答

1

指定使用相同的字段名称的多个表单元素,使用该语法:

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

这应该返回一个值的数组使用。

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

+0

这种方式不如我希望的那么优雅,但这是我最终做的。 – 2010-05-24 15:20:01

0

你能做到这一点形成了附加的开始/结束日期的GET请求的的onsubmit:

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 
} 
0

当提交表单,你只能提交GET或POST请求。
GET请求将连接所有的表单元素的URL在这样的格式:

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

不对应于蛋糕网址的标准,所以你必须做一些URL重写或反正解析。

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

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