2017-12-27 30 views
6

मेरे इलोकेंट मॉडल में 30 फ़ील्ड होते हैं।मैं कई फ़ील्ड में से एक को कैसे बना सकता हूं?

मान्यता नियम:

  1. पहले क्षेत्र है आवश्यक
  2. अन्य 29 क्षेत्रों में से
  3. , कम से कम एक क्षेत्र आवश्यक है।

लैरवेल 5.5 के दस्तावेज़ीकरण की जांच करते हुए, मुझे required_without_all प्रमाणीकरण नियम काफी संबंधित पाया गया। उपर्युक्त सत्यापन नियम लिखने का एक तरीका 2 9 फ़ील्ड required_without_all:field1,.....,field28 (यानी पहले और दिए गए फ़ील्ड को छोड़कर अन्य फ़ील्ड) में निर्दिष्ट करना होगा

लेकिन, इसके सत्यापन नियम में 28 फ़ील्ड नाम लिखने की आवश्यकता है पहले फ़ील्ड को छोड़कर सभी फ़ील्ड। क्या कोई आसान, अनावश्यक दृष्टिकोण है?

उत्तर

3

तुम अब भी required_without_all उपयोग कर सकते हैं, लेकिन यह पोषणीय रखने के लिए, आप संबंधित Request कक्षा में कुछ इस तरह कर सकता है:

public function rules() 
{ 
    $rules = [ 
     'name' => 'required', 
     'email' => 'required|email' 
    ]; 

    $fields = collect(['field1', 'field2', ...., 'field29']); 

    foreach ($fields as $field) { 
     $rules[$field] = 'required_without_all:' . implode(',', $fields->whereNotIn(null, [$field])->toArray()); 
    } 

    return $rules; 
} 
+0

जबकि टी कोड के ऊपर वह काम करता था, मैंने इसमें थोड़ा बदलाव किया क्योंकि मेरे पास अन्य 2 9 क्षेत्रों के लिए कुछ और नियम हैं। मैंने इस लाइन को '$ नियम [$ फ़ील्ड] में बदल दिया। = '| Required_without_all:'। इंपोड (',', $ फ़ील्ड-> जहां नॉटइन (शून्य, [$ फ़ील्ड]) -> toArray()); 'परिवर्तन के बाद, यह अब और काम नहीं कर रहा है। इन क्षेत्रों के लिए मेरे नियम 'कभी-कभी | date_format: Y-m-d'' क्या यह' कुछ 'नियम के संबंध में है? – Benedict

+0

@ बेनेडिक्ट '$ नियम [$ फ़ील्ड] = $ नियम [$ फ़ील्ड] आज़माएं। '| required_without_all:' .... ' –

3

उपयोग after validation hook

$validator = Validator::make($request->all(), [ 
    'field1' => 'required', 
]); 

$validator->after(function ($validator) { 
    if (!$this->additionalRule()) { 
     $validator->errors()->add('field2', 'At least one additional field has to be set!'); 
    } 
}); 

if ($validator->fails()) { 
    // 
} 

additionalRule में() विधि आप कर सकते हैं कुछ डालें:

if (isset($field2, field3,...field29)) {// at least one field is set 
    return !empty($field2 || field3 || ... || field29); 
} 

return false; 
+0

अतिरिक्त नियम() विधि को कहां परिभाषित किया जाना चाहिए? – Benedict

+0

यदि आप कस्टम अनुरोध कक्षा का उपयोग नहीं करते हैं, तो नियंत्रक में। आप इसे संरक्षित या निजी बना सकते हैं। – Tpojka

+0

मैंने नियंत्रक में विधि को परिभाषित किया है। तो, आप सीधे $ field1, $ field2 का उपयोग कैसे कर सकते हैं, यह एक त्रुटि फेंकता है कि $ field1 ..... अपरिभाषित हैं? – Benedict

संबंधित मुद्दे