2015-07-27 25 views
5

Tôi có một hình thức trong đó bao gồm một thời hạn và người sử dụng nên thiết lập thời hạn trong bốn lĩnh vực đầu vào như thế này:Laravel 5: Làm thế nào để xác thực đầu vào datetime từ 4 trường nhập?

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

Trong một formRequest, tôi biên soạn bốn lĩnh vực vào thời hạn a. Vì vậy, formRequest của tôi là như thế này:

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);   
    } 

Hạn chót là một datetime Jalali và tôi cần phải kiểm tra nếu người dùng đã chọn một ngày hợp lệ hay không (ví dụ 1394/12/31 không phải là một ngày hợp lệ). Gói jDatetime có phương thức checkdate hoạt động chính xác như php checkdate. Tôi có thể xác thực ngày trong biểu mẫu này ở đâu và làm cách nào để thông báo cho người dùng về một ngày hợp lệ? Trong thực tế, tôi cần xác thực này trước khi thời hạn được chuyển đến prepInput.

Trả lời

-1

Để giải quyết vấn đề này, tôi cần một phần mềm trung gian để xác thực ngày và tôi tìm thấy giải pháp trên Laracasts Chi tiết có thể tìm thấy ở đó.

+0

Chỉ liên kết câu trả lời không được coi là thực hành tốt, bạn nên đưa ra một ví dụ trong câu trả lời. – Petah

4

Validator Laravel của có một quy tắc date_format, vì vậy khi thiết lập các quy tắc trong yêu cầu hình thức, bạn sẽ có thể chỉ cần thêm một cái gì đó như:

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

Sau đó, theo quan điểm của bạn:

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

Bạn cũng có thể đơn giản hóa phương thức prepInput của mình bằng cách ghép nối năm/tháng/ngày/giờ thành chuỗi để tạo thời hạn; nó sẽ cơ bản giống nhau.

+0

Cảm ơn câu trả lời của bạn. Tôi đã thử điều này và nó sẽ không hoạt động, bởi vì nó sẽ không kiểm tra nếu một ngày không hợp lệ được cung cấp bởi người dùng và ngày không hợp lệ sẽ được chuyển đổi thành một hợp lệ và xác nhận sẽ được thông qua! –

+1

Bạn đã thử chỉ tạo chuỗi và xác thực chuỗi đó, thay vì sử dụng strftime? Nó có thể là lớp jDateTime đang chuyển đổi nó thành một ngày hợp lệ? Tôi đã có một thử nghiệm nhanh chóng và một ngày ghép nối đơn giản, sử dụng đầu vào biểu mẫu, sẽ không xác thực nếu nó thực sự không hợp lệ! – benJ

+0

có, jDateTime có vấn đề nhỏ và phương pháp kiểm tra không hoạt động. Tôi đã giải quyết vấn đề nhưng vấn đề chính vẫn còn. Tôi hỏi câu hỏi của tôi trong Laracasts và họ đã giúp tôi. –

Các vấn đề liên quan