2012-01-19 2 views
1

저장하기 전에 게시 된 데이터를 조작해야합니다. $ this-> 데이터는이CakePHP 2 beforeSave() not working

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를 삽입해야합니다.

하지만 디버깅을 위해 디버깅 ($ this-> data)을 beforeSave()에 호출하면 결과는 빈 배열이고 아무 것도 할 수 없습니다.

답변

1

beforeSave 메서드는 저장 기능을 계속할 수 있는지를 알려주기 위해 true 또는 false 중 하나만 반환해야하므로 논리를 넣을 수는 있지만 데이터 자체에는 영향을 미치지 않습니다.

이 (가)와 같은 저장 기능을 호출하기 전에 컨트롤러 기능에서 그것을으로 해주십시오 단지 (재) 데이터를 수정하려면이 작업을 진행 추가 컨트롤러 기능이 모든을

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 documentation] (http://book.cakephp.org/2.0/en/models/callback-methods.html)에서 beforeSave 내에서 데이터를 수정할 수 있다고 (MVC에 따르면)해야한다고 말하면됩니다. – LuisClemente

+0

@LuisClemente 네가 맞아,'$ this-> data' 배열의 키를 다시 설정하면 그 값으로 저장 될 것입니다. – Oldskool