मुझे ऐसी समस्या है। मैं क्या करना चाहता हूं - उपयोगकर्ता डेटा के लिए सत्यापन नियमों के लिए 1 स्थान बनाना है। इन डेटा में रोगी, पता और अन्य वस्तुएं शामिल हैं। इसलिए मैंने नियम बनाए:

protected function validationRules()
{
    return [
        'Patient.firstName' => 'required|string|min:2',
        'Patient.lastName'        => 'required|string',
        'Patient.sex'        => 'required|string',
        'Address.city'        => 'required|string',
        'Address.states'        => 'required|string',
        'Address.address1'        => 'required|string|min:2',
        'Address.zip'        => 'required|string|min:2',
        'Phone.mobileArea'        => 'string|min:3|required_with:Phone.mobilePhone',
        'Phone.mobilePhone'        => 'string|min:7|required_with:Phone.mobileArea',
        'Phone.homePhone'        => 'string|min:7|required_with:Phone.homeArea',
        'Phone.homeArea'        => 'string|min:3|required_with:Phone.homePhone',
    ];
}

फॉर्म में मेरे पास इनपुट हैं जैसे

<input id="firstName" type="text" class="form-control" name="Patient[firstName]" value="{{ $user->getFirstName() }}" required autofocus placeholder="First Name">

और बचाने पर सब कुछ सही ढंग से काम करता है। कोड <कोड> $this->validate($request, $this->validationRules());

सत्यापन बहुत अच्छी तरह से करता है। लेकिन....

दूसरी जगह, जब मैं दिखाना चाहता हूं कि उपयोगकर्ता प्रोफ़ाइल में कुछ जानकारी गुम है, तो मैं ऐसा सत्यापन करता हूं और यह विफल हो जाता है:

$validator = Validator::make([
        'Patient[firstName]' => $user->getFirstName(),
        'Patient[lastName]'        => $user->getLastName(),
        'Patient.lastName'        => $user->getLastName(),
        'Patient->lastName'        => $user->getLastName(),
        'Patient.sex'        => $user->getSex(),
        'Address.city'        => $address->getCity(),
        'Address.states'        => $address->getState(),
        'Address.address1'        => $address->getStreet1(),
        'Address.zip'        => $address->getZip(),
        'Phone.mobileArea'        => $mobilePhone->getArea(),
        'Phone.mobilePhone'        => $mobilePhone->getNumber(),
        'Phone.homePhone'        => $homePhone->getArea(),
        'Phone.homeArea'        => $homePhone->getNumber(),
    ], $this->validationRules());

जैसा कि आप देख सकते हैं, मैंने रोगी नामकरण के विभिन्न रूपों की कोशिश की-> डेटा सरणी में अंतिम नाम कुंजी। लेकिन मुझे अभी भी त्रुटि है कि अंतिम नाम की आवश्यकता है। जब मैं सत्यापनकर्ता प्रिंट करता हूं तो मैं ऐसी संरचना देख सकता हूं:

    Validator {#300 ▼
  #data: array:12 [▼
    "Patient[firstName]" => ""
    "Patient[lastName]" => "Colohanin"
    "Patient->lastName" => "Colohanin"
    "Patient->sex" => "female"
    "Address->city" => "GOSHEN2"
    "Address->states" => "NY"
    "Address->address1" => "Aleco Russo 59/1 a.68"
    "Address->zip" => "109242"
    "Phone->mobileArea" => "793"
    "Phone->mobilePhone" => "906990"
    "Phone->homePhone" => "022"
    "Phone->homeArea" => "3322278"
  ]
  #initialRules: array:1 [▼
    "Patient.lastName" => "required|string"
  ]

}

जैसा कि मैं समझता हूं, सत्यापनकर्ता के पास "Patient.lastName" के लिए नियम हैं, लेकिन डेटा सरणी में Laravel इस कुंजी को ऑब्जेक्ट में बदल देता है और Validator को डेटा बैग में यह कुंजी नहीं मिल सकती है। परिणाम में, मुझे त्रुटि है -> रोगी का अंतिम नाम आवश्यक है (परीक्षण उद्देश्यों के लिए, मैंने अन्य नियम हटा दिए हैं)

तो मेरा प्रश्न है। क्या किसी को पता है, "डॉट" सिंटैंक में डेटा सरणी कैसे सेट करें? मुझे डेटा ऐरे में "Patient.lastName" का नाम कैसे देना चाहिए (सत्यापनकर्ता में पहला पैरामीटर :: मेक ())?

अंडरस्कोर का उपयोग करने वाली पुनर्लेखन कुंजियाँ स्वीकार नहीं करती हैं(रोगी_फर्स्टनाम)

0
Colohanin Nik 11 अगस्त 2017, 17:31
1
लार्वा दस्तावेज़ कहता है, कि आपको 'Validator::make()` में डॉट-सिंटैक्स का उपयोग करने की आवश्यकता है। बग कहीं और होना चाहिए।
 – 
Jonathan
11 अगस्त 2017, 17:36
जैसा कि आप देख सकते हैं, मैंने dot -syntax की कोशिश की, लेकिन vaidator इसे नहीं ढूंढ सका
 – 
Colohanin Nik
11 अगस्त 2017, 18:15
आपकी टिप्पणी मुझे array_set फ़ंक्शन खोजने में मदद करती है धन्यवाद
 – 
Colohanin Nik
11 अगस्त 2017, 18:38

2 जवाब

अचानक मैंने पाया कि लार्वा सहायक के पास ऐसे सरणी के लिए array_set सहायक है। तो परिणाम में:

$data = [
        'Patient[firstName]' => $user->getFirstName(),
        'Patient[lastName]'        => $user->getLastName(),
        'Patient["lastName"]'        => $user->getLastName(),
        'Patient.lastName'        => $user->getLastName(),
        'Patient->lastName'        => $user->getLastName(),
        'Address.city'        => $address->getCity(),
        'Address.states'        => $address->getState(),
        'Address.address1'        => $address->getStreet1(),
        'Address.zip'        => $address->getZip(),
        'Phone.mobileArea'        => $mobilePhone->getArea(),
        'Phone.mobilePhone'        => $mobilePhone->getNumber(),
        'Phone.homePhone'        => $homePhone->getArea(),
        'Phone.homeArea'        => $homePhone->getNumber(),
    ];

सत्यापन विफल रहता है, लेकिन यदि आप तत्वों को जोड़ते हैं तो array_set सहायक को फेंक देते हैं यह मदद करता है array_set

        array_set($data, 'Patient.lastName'       , $user->getLastName());

उसके बाद, अंतिम नाम द्वारा सत्यापन अब विफल नहीं होता है। आशा है कि यह किसी की मदद करता है

0
Colohanin Nik 11 अगस्त 2017, 18:31

ये कोशिश करें:

$this->validate($request->get('Patient'), $this->validationRules());

फॉर्म इनपुट: सभी नाम इसे बदल देते हैं:

 <input id="firstName" type="text" class="form-control" name="Patient[firstName]" value="{{ $user->getFirstName() }}" required autofocus placeholder="First Name">
 <input id="mobileArea" type="text" class="form-control" name="Patient[mobileArea]" value="{{ $user->mobileArea() }}" required autofocus placeholder="mobileArea"

>

और सभी सत्यापन नियमों का उपयोग करके बदलें:

protected function validationRules()
{
    return [
        'Patient.firstName' => 'required|string|min:2',
        'Patient.lastName'        => 'required|string',
        'Patient.sex'        => 'required|string',
        'Patient.city'        => 'required|string',
        'Patient.states'        => 'required|string',
        'Patient.address1'        => 'required|string|min:2',
        'Patient.zip'        => 'required|string|min:2',
        'Patient.mobileArea'        => 'string|min:3|required_with:Patient.mobilePhone',
        'Patient.mobilePhone'        => 'string|min:7|required_with:Patient.mobileArea',
        'Patient.homePhone'        => 'string|min:7|required_with:Patient.homeArea',
        'Patient.homeArea'        => 'string|min:3|required_with:Patient.homePhone',
    ];
}

आशा है कि यह मदद करेगा

0
Vynart 11 अगस्त 2017, 18:32
जैसा कि मैंने लिखा - अंडरस्कोर का उपयोग करने वाली पुनर्लेखन कुंजी स्वीकार नहीं करती है (रोगी_फर्स्टनाम)। क्षमा करें, लेकिन यह अस्वीकार्य है
 – 
Colohanin Nik
11 अगस्त 2017, 18:26
मेरा मतलब यह नहीं था Patient_firstName, मैं अपना उत्तर संपादित करूंगा
 – 
Vynart
11 अगस्त 2017, 18:29
सेव एक्शन में सब कुछ सही ढंग से काम करता है, $this->validate($request, $this->validationRules()); सही ढंग से सहेजें अनुरोध को मान्य करें। समस्या शो पेज में थी, जहां मेरे पास पोस्ट नहीं है, प्राप्त करें, लेकिन मुझे उपयोगकर्ता को दिखाना है कि उसका कुछ डेटा मान्य नहीं है
 – 
Colohanin Nik
11 अगस्त 2017, 18:35
मैं देख रहा हूँ, मुझे क्षमा करें, मुझे प्रश्न समझ में नहीं आया। मेरी गलती
 – 
Vynart
11 अगस्त 2017, 18:41