Выделите несколько вариантов выбора после сбоя проверки - Laravel 5.2

Я впервые изучаю Laravel 5.2, и мне нужно повторно заполнить форму, когда проверка не удалась.

Я смог сделать это с помощью отдельных входов, таких как «имя» или «описание», но я не смог понять, как это сделать с «категорией», которая представляет собой множественный выбор.

Вид:

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

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

Благодарю вас!


person Bruno García    schedule 19.04.2016    source источник


Ответы (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-пакета из коллектива laravel.

composer require laravelcollective/html

следуйте инструкциям по установке в составной документации laravel Forms и HTML. .

затем просто введите это, где ваш выбор будет:

{!! Form::select('category[]', $categories, old('category'),['class' => 'form-control', 'multiple' => 'multiple'] ) !!}
person Fuxy    schedule 05.05.2016
comment
Идеальный! Большое спасибо! Я использую вариант 1. Вы бы порекомендовали мне использовать такие пакеты, как html, о котором вы упоминали ранее? Есть ли недостатки в использовании пакетов? - person Bruno García; 17.05.2016
comment
На самом деле это зависит от ваших предпочтений, я лично считаю, что вариант 2 чище, и единственный недостаток заключается в том, что вам придется прочитать документацию, чтобы понять, как его использовать, но как только вы привыкнете к этому, это будет быстрее и легче понять позже, когда вы вернетесь к вашему коду. - person Fuxy; 20.05.2016