CakePHP表单助手和日期时间

时间:2011-03-11 10:40:25

标签: php datetime cakephp form-helpers

我使用表单助手创建了日期时间选择,当我访问$this->data时。

看起来如下。

[Timetable] => Array
    (
        [event_id] => 133
        [location_id] => 39
        [start] => Array
            (
                [hour] => 09
                [min] => 06
                [day] => 11
                [month] => 03
                [year] => 2011
            )

    )

但我希望这看起来更像......

[Timetable] => Array
    (
        [event_id] => 133
        [location_id] => 39
        [start] => 2011-03-11 09:06:00

    )

有没有办法将其转换为此?

3 个答案:

答案 0 :(得分:2)

您可以像这样重建控制器中的$this->data['Timetable']['start'] var:

$this->data['Timetable']['start'] = $this->data['Timetable']['start']['year']
    .'-'.$this->data['Timetable']['start']['month']
    .'-'.$this->data['Timetable']['start']['day']
    .' '.$this->data['Timetable']['start']['hour']
    .':'.$this->data['Timetable']['start']['min'];

应该可以正常工作。

答案 1 :(得分:1)

这在Cookbook中没有记载,但模型用于将该数组转换为数据库友好格式的函数是Model::deconstruct($field, $data)。您可以按如下方式使用它:

$startAsString = $this->Timetable->deconstruct(
    'start', $this->data['Timetable']['start']
);

此解决方案的好处是可以让控制器了解表单提交的数据结构或数据库存储方式,从而打破MVC抽象。

答案 2 :(得分:0)

由于您使用表单助手生成代码,除非您更改表单助手,否则无法将其转换为单个索引。

你可能正在使用

$this->Form->input('start')

将其更改为以下将使其按照您想要的方式出现。

$this->Form->input('start', array('type'=>'text'));

但是,如果你这样做,你将失去蛋糕自动为你生成的所有下拉菜单。如果您使用日期选择器,则不成问题。