Laravel Errorbag ​​не работает внутри Blade-компонента - PullRequest
1 голос
/ 08 марта 2020

У меня есть Laravel компонент Livewire, в который я также включил компонент Blade

<div>
    <div class="card-header">
        <div>{{ $quiz->name }}</div>
        <x-create-question-modal :state="$modalQuestionState" :question="$question"/>
    </div>

    @foreach($quiz->questions as $question)
    <div class="card-body">
        <div class="card-title">
            {{ $question->question }}
        </div>
        @foreach($question->choices as $choice)
            <div class="card-text">
                {{ $choice->name }}
            </div>
        @endforeach
    </div>
        <hr>
    @endforeach
</div>

Это мой компонент Blade

<div>
    <div>
        <div wire:click="modalCreateQuestionToggle">Create New Quiz</div>
    </div>

    {{--  Create Quiz Modal --}}
    <div class="modal @if($state) d-block @endif" tabindex="-1" role="dialog">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title">Create New Quiz</h5>
                    <button wire:click="modalCreateQuestionToggle" type="button" class="close" data-dismiss="modal" aria-label="Close">
                        <span aria-hidden="true">&times;</span>
                    </button>
                </div>
                <form wire:submit.prevent="store">
                    <div class="modal-body">
                        <input type="text" wire:model="question">
                        @error('question') <span class="error alert-danger">{{ $message }}</span> @enderror
                    </div>
                    <div class="modal-footer">
                        <button type="submit" class="btn btn-primary">Create</button>
                    </div>
                </form>

            </div>
        </div>
    </div>

</div>

Это store метод, который у меня есть в Livewire Class,

    public function store() {
        //
        $this->validate([
            'question' => 'required|min:5',
        ]);

        Questions::create([
            'question' => $this->question,
            'quiz_id' => $this->quiz->id
        ]);
        $this->modalQuestionState = !$this->modalQuestionState;
        $this->question = null;
    }

Когда вызывается хранилище, проверка завершается неудачно, но по какой-то причине она не отображается в моем компоненте blade-сервера.

Это это то, что вывод сети Livewire

errorBag: {question: ["The question must be at least 5 characters."]}
question: ["The question must be at least 5 characters."]

1 Ответ

1 голос
/ 10 марта 2020

просто поместите эту часть на ваш компонент livewire вместо полного модального. У меня была та же проблема, решенная этим.

Это должно решить вашу проблему. дай мне знать.

      <div>
           <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title">Create New Quiz</h5>
                    <button wire:click="modalCreateQuestionToggle" type="button" class="close" data-dismiss="modal" aria-label="Close">
                        <span aria-hidden="true">&times;</span>
                    </button>
                </div>
                <form wire:submit.prevent="store">
                    <div class="modal-body">
                        <input type="text" wire:model="question">
                        @error('question') <span class="error alert-danger">{{ $message }}</span> @enderror
                    </div>
                    <div class="modal-footer">
                        <button type="submit" class="btn btn-primary">Create</button>
                    </div>
                </form>

            </div>
      </div>

Это мой модальный компонент в liveware:

https://ibb.co/KFWtFzP

Это мой клинок:

https://ibb.co/v156XVT

Объяснение: Это потому, что когда ваш компонент обновляется, livewire предоставляет вам обновленный вид с его изменениями. в обновленном компоненте модал больше не срабатывает, чтобы быть открытым. Таким образом, вы не получаете изменения. Поэтому, когда вы используете модальное, убедитесь, что вы используете модальное содержимое в вашем компоненте livewire, чтобы открытый модал оставался открытым, и содержимое внутри него будет обновляться. Надеюсь, я дал вам понять. Дайте мне знать, если вы не достаточно ясно.

...