2 votes

Impossible d'envoyer une collection à bootstrap-select dans un formulaire Laravel

Voici un formulaire d'édition que j'ai créé

@extends('main')

@section('title', 'Edit Post')

@section('content')

    <form class="form-group" action="/categories/update" method="POST">
        {{csrf_field()}}
        <input name="_method" type="hidden" value="PUT">

        <label for="category_id" id="category_id">Select Category</label>
        <select class="form-control" id="category_id" style="height:auto;" name="category_id">
            @foreach($categories as $category)
                <hr class="custom-hr-heading"/>
                <option value="{{$category->id}}" {{($category->id == $post->category->id)?"selected='selected'":""}}>
                    {{$category->name}}
                </option>
            @endforeach
        </select>

        <label for="title" class="mt-2" name="title" id="title">Your Post Title</label>
        <input type="text" class="form-control mb-2" value="{{$post->title}}" name="title" id="title">

        <textarea class="form-control" name="body">{{$post->body}}</textarea>

        <label for="tags" id="tags" name="tags">Select Tags..</label>

        <select class="selectpicker mt-3" id="tags[]" name="tags[]" multiple="multiple">
            @foreach($tags as$tag)
                <option value="{{$tag->id}}">{{$tag->name}}</option>
            @endforeach
        </select>
        <br/>
        <button type="submit" class="btn mt-3 btn-success btn-sm">Update</button>

    </form>

    <script type="text/javascript">
        tinymce.init({
            selector: 'textarea',
            theme: 'modern',
            height: 300
        });

        $('.selectpicker').selectpicker({
            style: 'btn-info'
        });
    </script>
@stop

Controller
    public function edit($id)
        {
            $post = Post::find($id);
            $categories = Category::orderBy('name', 'asc')->get();
            $tags = Tag::orderBy('name', 'asc')->get();
            return view('posts.edit', compact('post', 'categories', 'tags'))
        }

J'obtiens une boîte de sélection thématique qui dit simplement que rien n'est sélectionné. Est-ce que je transmets correctement la collection de balises à la boîte de sélection ?

J'utilise Laravel 5.5, PHP 7.2 et Bootstrap 4.

J'ai essayé bootstrap-select via CDN et fichiers locaux.

0voto

Sapnesh Naik Points 4878

Il vous manque un space

Changez :

    @foreach($tags as$tag)

A :

    @foreach($tags as $tag)

0voto

GoogleMac Points 1102

Conformément à Documentation de Bootstrap 4 il s'agit d'un attribut court, et non d'une paire nom-valeur, donc je le ferais comme ça (et je le nettoierais un peu) :

<select class="form-control" id="category_id" style="height:auto;" name="category_id">
        <option value="">Choose an Option</option>
        @foreach($categories as $category)
            <hr class="custom-hr-heading"/>
            <option value="{{ $category->id }}" @if($category->id == $post->category->id) selected @endif >
                {{ $category->name }}
            </option>
        @endforeach
</select>

0voto

Finchy70 Points 72

Le problème était en fait deux problèmes. Le support de Bootstrap 4 (final) n'est disponible que dans la dernière version bêta de bootstrap-select. ici

Mon code était aussi un peu abîmé. Voici le code final qui fonctionne.

<select class="selectpicker mt-3 form-control" name="tags[]" multiple>
    @foreach($tags as $tag)
         <option value="{{$tag->id}}" {{$post->tags->contains($tag->id)?"selected='selected":""}}>{{$tag->name}}</option>
    @endforeach
 </select>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X