2015-07-27 10 views
5

मैं एक रूप है जो एक समय सीमा भी शामिल है और उपयोगकर्ता इस तरह चार इनपुट फ़ील्ड में समय सीमा तय करनी चाहिए:लार्वेल 5: 4 इनपुट फ़ील्ड से डेटाटाइम इनपुट को कैसे सत्यापित करें?

<div class="form-group col-lg-3"> 
    {!! Form::label('year', 'Year', ['class' => 'control-label']) !!} 
    {!! Form::selectYear('year',$year, $year +1, null , ['class' => 'form-control']) !!} 
</div> 
<div class="form-group col-lg-3"> 
    {!! Form::label('month', 'Month', ['class' => 'control-label']) !!} 
    {!! Form::selectRange('month', 1, 12 , null , ['class' => 'form-control']) !!} 
</div> 
<div class=" form-group col-lg-3"> 
    {!! Form::label('day', 'Day', ['class' => 'control-label']) !!} 
    {!! Form::selectRange('day', 1, 31 , null , ['class' => 'form-control']) !!} 
</div> 
<div class=" form-group col-lg-3"> 
    {!! Form::label('hour', 'Hour', ['class' => 'control-label']) !!} 
    {!! Form::selectRange('hour', 6, 23 , null , ['class' => 'form-control']) !!} 
</div> 

एक formRequest में, मैं एक समय सीमा में इन चार क्षेत्रों संकलन कर रहा हूँ। तो मेरी formRequest इस तरह है:

public function rules() 
    { 
     $this->prepInput(); 
     return [ 

     ]; 
    } 
    public function prepInput(){ 
     $input=$this->all(); 
     ... 
     $input['deadline']=$this->prepDeadline($input['hour'], $input['month'], $input['day'], $input['year']); 
     ... 
     $this->replace($input); 
    } 


    public function prepDeadline($hour,$month,$day, $year){ 

      $time = jDateTime::mktime($hour, 0, 0, $month, $day, $year); 
      return $deadline = strftime("%Y-%m-%d %H:%M:%S", $time);   
    } 

की समय सीमा एक जलाली datetime है और मैं अगर उपयोगकर्ता कोई मान्य दिनांक का चयन किया या नहीं किया है (उदाहरण के लिए 1394/12/31 एक मान्य दिनांक नहीं है) की जांच की जरूरत है। jDatetime पैकेज में checkdate विधि है जो वास्तव में php checkdate की तरह काम करता है। मैं इस फॉर्म में तारीख को कहां और कैसे मान्य कर सकता हूं और उपयोगकर्ता को मान्य तिथि चुनने के लिए सूचित कर सकता हूं? असल में मुझे prepInput पर समय सीमा पारित होने से पहले इस सत्यापन की आवश्यकता है।

उत्तर

-1

इस समस्या को हल करने के लिए मुझे तारीख को सत्यापित करने के लिए एक मिडलवेयर की आवश्यकता थी और मुझे Laracasts पर समाधान मिला। विवरण वहां पाए जा सकते हैं।

+0

केवल लिंक को संबोधित करने के लिए अच्छा अभ्यास नहीं माना जाता है, आपको जवाब में एक उदाहरण देना चाहिए। – Petah

4

Laravel के सत्यापनकर्ता एक DATE_FORMAT नियम है, इसलिए जब में अनुरोध नियमों को स्थापित करने, तो आप बस की तरह कुछ जोड़ने के लिए सक्षम होना चाहिए:

public function rules() 
{ 
    $this->prepInput(); 
    return [ 
     'deadline' => 'date_format:Y-m-d H:i:s' 
    ]; 
} 
फिर

अपने ध्यान में रखते हुए:

@if ($errors->has('deadline')) 
    {{ $errors->first('deadline') }} 
@endif 

आप समय सीमा बनाने के लिए वर्ष/महीने/दिन/घंटे को स्ट्रिंग में बस संयोजित करके अपनी प्रीपूट विधि को सरल बना सकते हैं; यह अनिवार्य रूप से एक ही बात होगी।

+0

आपके उत्तर के लिए धन्यवाद। मैंने यह कोशिश की है और यह काम नहीं करेगा, क्योंकि यह जांच नहीं करेगा कि उपयोगकर्ता द्वारा अमान्य तिथि प्रदान की जाती है और अमान्य तिथि को वैध में परिवर्तित कर दिया जाएगा और सत्यापन पारित किया जाएगा! –

+1

क्या आपने स्ट्रिंग बनाने के बजाय स्ट्रिंग बनाने और इसे सत्यापित करने का प्रयास किया है? यह जेडेटटाइम क्लास हो सकता है जो इसे वैध तिथि में परिवर्तित कर रहा है? मेरे पास फॉर्म इनपुट का उपयोग करके एक त्वरित परीक्षण और एक सरल समेकित दिनांक था, अगर यह वास्तव में अमान्य है तो सत्यापन विफल हो जाएगा! – benJ

+0

हां, जेडीएटीटाइम में मामूली समस्या है और चेकडेट विधि काम नहीं कर रही थी। मैंने इस मुद्दे को हल किया लेकिन मुख्य समस्या बनी रही। मैंने लाराकास्ट्स में अपने प्रश्न पूछा और उन्होंने मेरी मदद की। –

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