मैं सत्यापन के साथ एक समस्या है। सिद्धांत 1 में मैंने इसका उपयोग किया:सिद्धांत 2 सत्यापन
if ($model->isValid()) {
$model->save();
} else {
$errorStack = $model->getErrorStack();
...
}
और $ त्रुटि में स्टैक मुझे कॉलम का नाम और त्रुटि संदेश मिला। लेकिन सिद्धांत 2 में मैं यह सिर्फ उपयोग कर सकते हैं:
इकाई
/**
* @PrePersist @PreUpdate
*/
public function validate()
{
if ($this->name == null)) {
throw new \Exception("Name can't be null");
}
}
नियंत्रक:
try {
$user = new \User();
//$user->setName('name');
$user->setCity('London');
$this->_entityManager->persist($user);
$this->_entityManager->flush();
} catch(Exception $e) {
error_log($e->getMessage());
}
लेकिन मैं दो समस्याएं हैं यह कण:
- मुझे नहीं पता कौन सा कॉलम?
- मैं अद्वितीय जाँच करने के लिए नहीं करना चाहती मैन्युअल
मैं इकाई से सत्यापित करें() अद्वितीय catched किया जाएगा (यह error.log से)
Unique violation: 7 ERROR: duplicate key value violates unique constraint "person_email_uniq"
लेकिन उदाहरण के उपयोगकर्ता के लिए छोड़ देते हैं 2 रिकॉर्ड्स को सहेजें और पहला गलत है, लेकिन दूसरा वैध, एंटिटी मैनेजर को पहले सेव करने के बाद बंद हो जाएगा और मैं "EntityManager बंद है" के कारण दूसरे (अच्छे) रिकॉर्ड को सहेज नहीं सकता।
कौन इस समस्या के लिए सबसे अच्छा समाधान है? जाँच http://www.doctrine-project.org/docs/orm/2.0/en/reference/events.html#preupdate श्रोताओं के आधार पर सत्यापन,, ValidCreditCardListener उदाहरण - - - एक इकाई से संबंधित व्यापार तर्क के रूप में आप अपनी पोस्ट में वर्णित सत्यापन तीसरे पक्ष के पुस्तकालयों के आधार पर, कुछ: