2011-03-11 79 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