2015-02-20 17 views
6

Tôi có một số mã đã bị hỏng ở đâu đó trên đường đi và tôi đang gặp sự cố khi gỡ lỗi nó.Gỡ lỗi lưu() trả về false CakePHP 3.0

Đây là phiên bản được đơn giản hóa của nó.

$data = $this->request->data; 

$form = $this->Forms->get($data['id'], [ 
    'contain' => ['FieldsForms' => ['data'] 
    ] 
]); 

$form = $this->Forms->patchEntity($form, $data, 
    ['associated' => [ 
     'FieldsForms.Data', 

    ] 
]); 

if ($this->Forms->save($form)) { 
    // sunshine and rainbows 
} else { 
    // wailing and gnashing of teeth 
} 

tôi là trái khóc lóc và nghiến răng mà không cần bất kỳ lỗi nào, như xa như tôi có thể thấy nếu tôi gỡ lỗi dữ liệu $ có vẻ như nó là ok (mặc dù vì nó khá dài và chứa một loạt các UUIDs nó có thể Tôi đang thiếu cái gì đó).

Lỗi xác thực trống.

Lưu đang trả về false - bất kỳ đề xuất nào về cách gỡ lỗi này có thể tiết kiệm những gì tôi đã để lại.

Cảm ơn!

+0

Khi bạn đang nói "lỗi _Validation được empty_", làm thế nào để bạn kiểm tra xem? _Sau khi lưu để các lỗi quy tắc bảng có thể được bao gồm? – ndm

+0

Chế độ xem được hiển thị và sử dụng bộ gỡ lỗi cho thấy xác thực cho 'biểu mẫu' là trống –

+0

Sau đó, tôi khuyên bạn nên tìm hiểu nguồn lõi CakePHP để gỡ lỗi luồng điều khiển bắt nguồn từ lệnh 'Bảng :: lưu()'. – ndm

Trả lời

14

Vấn đề hóa ra là dữ liệu, như mong đợi nhưng không thể thấy ngay lập tức vì lưu đã trả về sai và dữ liệu khá lớn.

Lần đầu tiên tôi thực hiện một tập con của dữ liệu vấn đề hiển thị cùng một hành vi, sau đó đã thay đổi mã ORM/Table.php cho chức năng lưu như sau để có thể xem vấn đề ở đâu:

$x = $entity->errors(); 
     if ($x) { 
      debug($entity); 
      debug($x); 
     // if ($entity->errors()) { 
      return false; 
     } 

Để tôi có thể xem điều gì đang diễn ra và tiếp tục khắc phục dữ liệu.

+0

Giàu - điều này thật tuyệt vời. Làm việc như một say mê. Có cách nào để thực hiện điều này bằng cách ghi đè lớp Bảng trong mã ứng dụng của bạn, thay vì sửa đổi lõi không? Cảm ơn bạn. –

1

Không chắc liệu câu trả lời trước đó có dựa trên phiên bản cũ hay không, nhưng trong phiên bản CakePHP mới nhất (3.4) bạn có thể truy xuất lỗi trực tiếp từ thực thể $ trong bộ điều khiển. Mảng lỗi chứa mỗi trường thực thể không thành công, với một mảng con của các xác nhận không thành công.

<?php 
// In Articles Controller 
... 

public function add(){ 
... 
    if ($this->Articles->save($article)) { 
    $this->Flash->success(__('The Article has been saved.')); 
    return $this->redirect(['action' => 'index']); 
    } else { 
    Log::Debug($article->errors()); 
    } 
0

Thay vì thay đổi mã Bánh lõi bạn có thể làm điều này:

if ($this->Forms->save($form)) { 
    // sunshine and rainbows 
} else { 
    //you know now what fail 
    $andTheErrorsAre = $entity->getErrors(); 
} 
Các vấn đề liên quan