2015-02-20 6 views
6

लौट रहा है मेरे पास कुछ कोड है जो रास्ते में कहीं टूटा हुआ है और मुझे इसे डिबग करने में समस्या हो रही है।डिबगिंग सेव() झूठी केकपीएचपी 3.0

यह इसका एक सरल संस्करण है।

$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 
} 

मैं के रूप में मैं अगर मैं $ डेटा यह लग रहा है यह ठीक है की तरह (हालांकि बाद से यह काफी लंबी है और UUIDs का एक समूह होता है यह संभव है डिबग देख सकते हैं रोने और किसी भी त्रुटि के बिना दांत पीसना छोड़ रहा हूँ, जहाँ तक मुझे कुछ याद आ रहा है)।

सत्यापन त्रुटियां खाली हैं।

बचत झूठी वापसी कर रही है - इस पर डीबग करने के तरीके पर कोई सुझाव यह है कि मैंने जो स्वच्छता छोड़ी है उसे बचा सकता है।

धन्यवाद!

+0

जब आप कह रहे हैं "_Validation त्रुटियों है empty_", आप कैसे है कि जांच कैसे करूं? _After_ बचत ताकि संभव तालिका नियम त्रुटियों को शामिल किया जा सके? – ndm

+0

दृश्य प्रस्तुत किया गया है और डीबग किट का उपयोग करके यह 'फॉर्म' के लिए मान्य –

+0

के रूप में सत्यापन दिखाता है, फिर मैं 'टेबल :: सेव()' कॉल से उत्पन्न नियंत्रण प्रवाह को डीबग करने के लिए केकपीएचपी कोर स्रोत में खोदने का सुझाव देता हूं। – ndm

उत्तर

14

समस्या के रूप में डेटा होने की संभावना है, लेकिन तुरंत नहीं देख सका क्योंकि बचत झूठी वापसी कर रही थी और डेटा काफी बड़ा था।

मैं पहली बार, समस्या डेटा जो तब एक ही व्यवहार का प्रदर्शन किया, NDM के सुझाव निम्न में से एक सबसेट बनाया बचाने के समारोह के लिए ORM/Table.php कोड बदल के रूप में जहां समस्या थी देखने के लिए सक्षम होने के लिए इस प्रकार है:

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

ताकि मैं देख सकूं कि क्या हो रहा था और डेटा को ठीक करने के लिए चला गया।

+0

रिच - यह शानदार है। एक जादू की तरह काम करता है। कोर को संशोधित करने के बजाय, आपके ऐप कोड में टेबल क्लास को ओवरराइड करके इसे कार्यान्वित करने का कोई तरीका है? धन्यवाद। –

1

सुनिश्चित नहीं है कि पहले का जवाब पुराने संस्करण पर आधारित है, लेकिन नवीनतम केकेफ़ संस्करण (3.4) में आप सीधे नियंत्रक के भीतर $ इकाई से त्रुटियों को पुनर्प्राप्त कर सकते हैं। त्रुटियों में सरणी में विफलता मान्यताओं की एक बाल सरणी के साथ विफल होने वाली प्रत्येक इकाई फ़ील्ड शामिल होती है।

<?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

इसके बजाय कोर केक कोड आप ऐसा कर सकते संशोधित:

if ($this->Forms->save($form)) { 
    // sunshine and rainbows 
} else { 
    //you know now what fail 
    $andTheErrorsAre = $entity->getErrors(); 
} 
संबंधित मुद्दे