2011-03-11 96 views
1

我使用窗体帮助器创建日期时间选择,并访问$this->data时。CakePHP窗体助手和日期时间

它看起来像下面这样。

[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 

    ) 

有没有办法把它转变成这样?

回答

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

应该正常工作。

+0

sprintf()会更好:)但这不是必需的,因为蛋糕知道如何处理它。 – dogmatic69 2011-03-11 11:01:45

+0

这会是最好的方式吗?难道不能使用表单助手本身来完成吗? – Aran 2011-03-11 11:50:54

+0

并非真正的助手只在设计中可用。 – Dunhamzzz 2011-03-11 12:06:35

0

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

你可能会使用

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

它更改为下面将使它出来你想要的方式。

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

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

+2

蛋糕会知道该如何处理数组并保存它。 – dogmatic69 2011-03-11 10:49:33

+0

@ dogmatic69,这是真的。我假设OP想要它作为一个单一的字符串的东西。 – JohnP 2011-03-11 10:54:50

1

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

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

该解决方案具有不会因你的控制器打破了MVC抽象的好处了解提交表格或数据库如何将其存储数据的任何结构。

+0

这个代码放在哪里?在我的模型里面? – Aran 2011-03-13 18:24:08

+0

您可以从模型中或从您的控制器访问它。这取决于您需要访问日期时间的位置以及用于何种目的。 – 2011-03-13 18:52:22