2016-09-23 4 views
1

Надеюсь, что все делают отлично. Я использую Laravel 5.3 и пакет LaravelCollective для привязки формы-модели. У меня есть subjects array, который я хочу проверить, а затем сохранить в базе данных, если во входных данных нет ошибки.Моя форма не заполняется, если во входных данных есть ошибка проверки. Laravel Collective

Следующие фрагменты показывают частичный вид формы, других представлений, правил проверки и кода контроллера.

UserProfile.blade.php

    <!-- Panel that Adds the Subject - START --> 
        <div class="col-md-12"> 
         <div class="panel panel-default" id="add_Subject_panel"> 
          <div class="panel-heading">Add Subject(s):</div> 
          <div class="panel-body"> 
           {!! Form::open(array('method'=>'post', 'url'=>route('user.store.subject', 1))) !!} 
            @include('user.partials.subjects', ['buttonText'=>'Add Subject(s)']) 
           {!! Form::close() !!} 
          </div> 
         </div> 
        </div> 
        <!-- Panel that Adds the Subject - END --> 

subjects.blade.php

@if (count($errors) > 0) 
    <div class="alert alert-danger"> 
     <ul> 
      @foreach ($errors->all() as $error) 
       <li>{{ $error }}</li> 
      @endforeach 
     </ul> 
    </div> 
@endif 

    <div class="subject-list"> 
     <div class="input-group subject-input"> 
      <input type="text" name="name[]" class="form-control" value="" placeholder="Subject" /> 
      <span class="input-group-btn"> 
       <span class="btn btn-default">Primary subject</span> 
      </span> 
     </div> 
    </div> 

    <div class="text-right"> 
     <br /> 
     <button type="button" class="btn btn-success btn-sm btn-add-subject"><span class="glyphicon glyphicon-plus"></span> Add Subject</button> 
    </div> 

    <div class="form-group"> 
     <div class="col-md-6 col-md-offset-4 text-right"> 
      <button type="submit" class="btn btn-primary"> 
       {{ $buttonText }}&nbsp; <i class="fa fa-btn fa-subject"></i> 
      </button> 
     </div> 
    </div> 


@push('scripts') 

{{-- <script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script> --}} 
<script src="{{ asset('scripts/jquery-2.2.4.min.js') }}" type="text/javascript" charset="utf-8" async defer></script> 

<script> 

     $(function() 
     { 

      $(document.body).on('click', '.btn-remove-subject', function(){ 
       $(this).closest('.subject-input').remove(); 
      }); 

      $('.btn-add-subject').click(function() 
      { 
       var index = $('.subject-input').length + 1; 

       $('.subject-list').append(''+ 
        '<div class="input-group subject-input" style="margin-top:20px; margin-bottom:20px;">'+ 
         '<input type="text" name="name['+index+']" class="form-control" value="" placeholder="Subject" />'+ 
         '<span class="input-group-btn">'+ 
          '<button class="btn btn-danger btn-remove-subject" type="button"><span class="glyphicon glyphicon-remove"></span></button>'+ 
         '</span>'+ 
        '</div>' 
       ); 
      }); 
     }); 


</script> 

@endpush 

Я хочу, чтобы проверить все предметы, переданные в виде массива к контроллеру с помощью пользовательского созданного запрос формы. следующий код для этой формы запроса

SubjectRequest.php

<?php 

namespace App\Http\Requests; 

use Illuminate\Foundation\Http\FormRequest; 

class SubjectRequest extends FormRequest 
{ 
    /** 
    * Determine if the user is authorized to make this request. 
    * 
    * @return bool 
    */ 
    public function authorize() 
    { 
     return true; 
    } 

    /** 
    * Get the validation rules that apply to the request. 
    * 
    * @return array 
    */ 
    public function rules() 
    { 
     // dd("Rules Area"); 
     foreach($this->request->get('name') as $key => $val) 
     { 

      $rules['name.'.$key] = 'required|min:5|max:50'; 
     } 
     // dd($rules); 
     return $rules; 
    } 

    public function messages() 
    { 
     // dd('Message Area. . .'); 
     $messages = []; 
     foreach($this->request->get('name') as $key => $val) 
     { 
      $messages['name.'.$key.'.required'] = ' Subject Name '.$key.'" is required.'; 
      $messages['name.'.$key.'.min'] = ' Subject Name '.$key.'" must be atleast :min characters long.'; 
      $messages['name.'.$key.'.max'] = ' Subject Name '.$key.'" must be less than :max characters.'; 
     } 
     // dd($messages); 
     return $messages; 
    } 
} 

Ниже приведен код метода контроллера я использую для хранения данных, введенных в базу данных массива.

public function storeSubjects(SubjectRequest $request) 
    { 
     $data = $request->all(); 

     // save logic 
     dd($data); 
    } 

Проблема: Моя форма не заселять, когда есть какая-то ошибка проверки во входных данных. После получения ошибок проверки мои поля ввода пустые.

ответ

0

Проблема

В subject.blade.php, ваш код выглядит

<input type="text" name="name[]" class="form-control" value="" placeholder="Subject" /> 

Ваши поля не заселять, потому что вы оставили value атрибут пустым.

Решение:

Пропустите старое значение, чтобы решить вашу проблему.

<input type="text" name="name[]" class="form-control" value="{{old('name[]')}}" placeholder="Subject" /> 
+0

Я попытался это, но реальная проблема все еще существует. Мне нужен массив заполненных значений, которые я передал для проверки – ahmednawazbutt