2012-01-19 80 views
1

我必须在保存之前操作数据。 $这 - >数据是这样的CakePHP 2 beforeSave()不起作用

Array 
(
    [Presence] => Array 
     (
      [Month] => 02 
      [Year] => 2012 
      [0] => Array 
       (
        [day] => 1 
        [presenza] => 1 
        [time_in] => 09:00 
        [time_out] => 18:00 
        [pausa] => 01:00 
        [hours] => 08:00 
        [client_id] => 4 
        [note] => 
       ) 

      [1] => Array 
       (
        [day] => 2 
        [presenza] => 1 
        [time_in] => 09:00 
        [time_out] => 18:00 
        [pausa] => 01:00 
        [hours] => 08:00 
        [client_id] => 4 
        [note] => 
       ) 

      [2] => Array 
       (
        [day] => 3 
        [presenza] => 1 
        [time_in] => 09:00 
        [time_out] => 18:00 
        [pausa] => 01:00 
        [hours] => 08:00 
        [client_id] => 4 
        [note] => 
       ) 

      [3] => Array 
       (
        [day] => 4 
        [presenza] => 1 
        [time_in] => 09:00 
        [time_out] => 18:00 
        [pausa] => 01:00 
        [hours] => 08:00 
        [client_id] => 4 
        [note] => 
       ) 

      [4] => Array 
       (
        [note] => 
       ) 

      [5] => Array 
       (
        [note] => 
       ) 

      [6] => Array 
       (
        [day] => 7 
        [presenza] => 1 
        [time_in] => 09:00 
        [time_out] => 18:00 
        [pausa] => 01:00 
        [hours] => 08:00 
        [client_id] => 4 
        [note] => 
       ) 

      [7] => Array 
       (
        [day] => 8 
        [presenza] => 1 
        [time_in] => 09:00 
        [time_out] => 18:00 
        [pausa] => 01:00 
        [hours] => 08:00 
        [client_id] => 4 
        [note] => 
       ) 

      [8] => Array 
       (
        [day] => 9 
        [presenza] => 1 
        [time_in] => 09:00 
        [time_out] => 18:00 
        [pausa] => 01:00 
        [hours] => 08:00 
        [client_id] => 4 
        [note] => 
       ) 

      [9] => Array 
       (
        [day] => 10 
        [presenza] => 1 
        [time_in] => 09:00 
        [time_out] => 18:00 
        [pausa] => 01:00 
        [hours] => 08:00 
        [client_id] => 4 
        [note] => 
       ) 

      [10] => Array 
       (
        [day] => 11 
        [presenza] => 1 
        [time_in] => 09:00 
        [time_out] => 18:00 
        [pausa] => 01:00 
        [hours] => 08:00 
        [client_id] => 4 
        [note] => 
       ) 

      [11] => Array 
       (
        [note] => 
       ) 

      [12] => Array 
       (
        [note] => 
       ) 

      [13] => Array 
       (
        [day] => 14 
        [presenza] => 1 
        [time_in] => 09:00 
        [time_out] => 18:00 
        [pausa] => 01:00 
        [hours] => 08:00 
        [client_id] => 4 
        [note] => 
       ) 

      [14] => Array 
       (
        [day] => 15 
        [presenza] => 1 
        [time_in] => 09:00 
        [time_out] => 18:00 
        [pausa] => 01:00 
        [hours] => 08:00 
        [client_id] => 4 
        [note] => 
       ) 

      [15] => Array 
       (
        [day] => 16 
        [presenza] => 1 
        [time_in] => 09:00 
        [time_out] => 18:00 
        [pausa] => 01:00 
        [hours] => 08:00 
        [client_id] => 4 
        [note] => 
       ) 

      [16] => Array 
       (
        [day] => 17 
        [presenza] => 1 
        [time_in] => 09:00 
        [time_out] => 18:00 
        [pausa] => 01:00 
        [hours] => 08:00 
        [client_id] => 4 
        [note] => 
       ) 

      [17] => Array 
       (
        [day] => 18 
        [presenza] => 1 
        [time_in] => 09:00 
        [time_out] => 18:00 
        [pausa] => 01:00 
        [hours] => 08:00 
        [client_id] => 4 
        [note] => 
       ) 

      [18] => Array 
       (
        [note] => 
       ) 

      [19] => Array 
       (
        [note] => 
       ) 

      [20] => Array 
       (
        [day] => 21 
        [presenza] => 1 
        [time_in] => 09:00 
        [time_out] => 18:00 
        [pausa] => 01:00 
        [hours] => 08:00 
        [client_id] => 4 
        [note] => 
       ) 

      [21] => Array 
       (
        [day] => 22 
        [presenza] => 1 
        [time_in] => 09:00 
        [time_out] => 18:00 
        [pausa] => 01:00 
        [hours] => 08:00 
        [client_id] => 4 
        [note] => 
       ) 

      [22] => Array 
       (
        [day] => 23 
        [presenza] => 1 
        [time_in] => 09:00 
        [time_out] => 18:00 
        [pausa] => 01:00 
        [hours] => 08:00 
        [client_id] => 4 
        [note] => 
       ) 

      [23] => Array 
       (
        [day] => 24 
        [presenza] => 1 
        [time_in] => 09:00 
        [time_out] => 18:00 
        [pausa] => 01:00 
        [hours] => 08:00 
        [client_id] => 4 
        [note] => 
       ) 

      [24] => Array 
       (
        [day] => 25 
        [presenza] => 1 
        [time_in] => 09:00 
        [time_out] => 18:00 
        [pausa] => 01:00 
        [hours] => 08:00 
        [client_id] => 4 
        [note] => 
       ) 

      [25] => Array 
       (
        [note] => 
       ) 

      [26] => Array 
       (
        [note] => 
       ) 

      [27] => Array 
       (
        [day] => 28 
        [presenza] => 1 
        [time_in] => 09:00 
        [time_out] => 18:00 
        [pausa] => 01:00 
        [hours] => 08:00 
        [client_id] => 4 
        [note] => 
       ) 

      [28] => Array 
       (
        [day] => 29 
        [presenza] => 1 
        [time_in] => 09:00 
        [time_out] => 18:00 
        [pausa] => 01:00 
        [hours] => 08:00 
        [client_id] => 4 
        [note] => 
       ) 

      [user_id] => 3 
     ) 

) 

数组,我要修改的日期和插入每一个“子阵列”的USER_ID。

但是,当我打电话,只是为了调试,在我的beforeSave()调试($ this-> data)结果是一个空数组,我什么都不能做。

回答

1

beforeSave方法只应返回truefalse来告诉save函数是否可以继续,所以您只能将逻辑放在那里,但不能影响数据本身。

要修改数据,只是(重新)-set它在你的控制器函数调用保存功能,像以前一样:

foreach($this->data['Presence'] as $key => $data) { 
    if(is_array($key)) { 
     // This should be a sub-array 
     $this->data['Presence'][$key]['day'] = 1; // Set your 'new' day here 
     $this->data['Presence'][$key]['user_id'] = 1337; // Set your user id here 
    } 
} 

// Then, afterwards, save the adjusted data array 
$this->Presence->save($this->data); 
+0

做这一切的附加控制器功能得到它的工作,但它是正确的根据MVC做到这一点? – simofox

+0

只是说[cakephp文档](http://book.cakephp.org/2.0/en/models/callback-methods.html)说你可以(并且根据MVC你应该)在beforeSave中修改数据。 – LuisClemente

+0

@LuisClemente你是对的,如果你重新设置'$ this-> data'数组的任何键,它将被保存。 – Oldskool