2016-04-19 16 views
0

Ich lerne Laravel 5.2 zum ersten Mal, und ich muss ein Formular erneut ausfüllen, wenn die Validierung fehlschlägt.Markieren Sie mehrere Auswahloptionen nach fehlgeschlagenen Validierungen - Laravel 5.2

Ich konnte dies mit einzelnen Eingaben als 'Name' oder 'Beschreibung' tun, aber ich konnte nicht herausfinden, wie man es mit der 'Kategorie' macht, die eine Mehrfachauswahl ist.

Ausblick:

<form action="{{ url('addproduct') }}" method="POST"> 
       {!! csrf_field() !!} 
       <div class="form-group"> 
        <label for="#productName">Name:</label> 
        <input id="productName" class="form-control" name="name" type="text" placeholder="Product name" value="{{ old('name') }}"> 
       </div> 
       <div class="form-group"> 
        <label for="#productDescription">Description:</label> 
        <textarea id="productDescription" class="form-control" name="description" rows="3" placeholder="Product description" value="{{ old('description') }}"></textarea> 
       </div> 
       @if ($categories) 
       <div class="form-group"> 
        <label for="#productCategory">Category:</label> 
        <select id="productCategory" class="form-control" name="category[]" multiple> 
         @foreach ($categories as $category) 
         <option value="{{ $category->id }}">{{ $category->name }}</option> 
         @endforeach 
        </select> 
       </div> 
       @endif 
       <div class="form-group"> 
        <label for="#productQuantity">Quantity:</label> 
        <input id="productQuantity" class="form-control" name="quantity" type="number" min="0" value="0"> 
       </div> 
       <button class="form-control btn btn-success" type="submit">Add Product</button> 
      </form> 

Controller:

public function add(Request $request) { 
    $data = array(); 
    $data['msgAdded'] = false; 

    $data['categories'] = Category::select('name', 'id')->get(); 

    if ($request->isMethod('post')) { 
     $this->validate($request, [ 
      'name' => 'required|max:50', 
      'description' => 'required|max:200', 
      'category' => 'required', 
      'quantity' => 'required|min:0', 
     ]); 

     $product = new Product; 
     $product->name = $request->name; 
     $product->description = $request->description; 
     $product->quantity = $request->quantity; 
     $product->save(); 

     foreach ($request->category as $cat) { 
      $category = Category::find($cat); 
      $category->products()->attach($product->id); 
     } 

     $data['msgAdded'] = true; 
    } 

    $data['view'] = 'addproduct'; 
    return view('products/add', $data); 
} 

Ich mag würde wissen, ob es mit Klinge erreichen sein kann, oder der beste Weg, das zu erreichen.

Vielen Dank!

Antwort

1

Option 1

Sie haben würde das Auswahl Teil Ihrer Form wie folgt schreiben:

<div class="form-group"> 
    <label for="#productCategory">Category:</label> 
    <select id="productCategory" class="form-control" name="category[]" multiple> 
    @foreach ($categories as $category) 
     <option value="{{ $category->id }}"{{ !empty(old('category')) && in_array($category->id, old('category')) ? ' selected="selected"' : '' }}>{{ $category->name }}</option> 
    @endforeach 
    </select> 
</div> 

Option 2

Und wohl die elegantere Lösung zu installieren das html-paket aus dem laravel-kollektiv

composer require laravelcollective/html 

Befolgen Sie die Installationsanweisungen auf der laravel collective Forms & HTML documentation.

dann geben Sie einfach das, wo Ihr wählen würde:

{!! Form::select('category[]', $categories, old('category'),['class' => 'form-control', 'multiple' => 'multiple']) !!} 
+0

Perfect! Vielen Dank! Ich benutze die Option 1. Würden Sie mir empfehlen, Pakete wie die HTML zu verwenden, die Sie zuvor erwähnt haben? Gibt es Nachteile bei der Verwendung von Paketen? –

+0

Es liegt an deiner Vorliebe. Ich persönlich denke, Option 2 ist sauberer und der einzige Nachteil ist, dass du die Dokumentation lesen musst, um zu verstehen, wie du sie verwendest, aber wenn du dich erst einmal daran gewöhnt hast, ist es schneller und leichter zu verstehen zurück zu deinem Code. – Fuxy