2016-04-19 7 views
0

初めてLaravel 5.2を学びました。検証が失敗したときにフォームを再投入する必要があります。検証が失敗した後に複数選択オプションを強調表示 - Laravel 5.2

私は「名前」または「説明」のように1つの入力でこれを行うことができましたが、複数の選択である「カテゴリ」を使ってそれを行う方法を見つけることはできません。

ビュー:

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

コントローラー:

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

私はそれは、ブレード、またはそれを達成するための最良の方法では達成することができた場合に知っていただきたいと思います。

ありがとうございました!あなたはこのようなフォームの選択部分を記述する必要があります

答えて

1

オプション1

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

オプション2

そして間違いなく、よりエレガントな解決策は、インストールすることですラーベル集団のhtmlパッケージ

composer require laravelcollective/html 

laravel collective Forms & HTML documentationのインストール手順に従います。

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

パーフェクト:あなたの選択は次のようになりどこ

そしてちょうどこれを入力してください!どうもありがとうございました!私はオプション1を使用しています。 以前に言及したhtmlなどのパッケージを使用することをお勧めしますか?パッケージを使用する際の欠点はありますか? –

+0

それはあなたの好みに左右されます。私は個人的には、オプション2はよりクリーンで、唯一の欠点は、ドキュメントの使い方を理解することですが、使い慣れれば後で理解しやすくなりますあなたのコードに戻ってください。 – Fuxy

関連する問題