Почему, если "allParticipants == 0" и есть нестандартные вопросы, сообщение, которое появляется неправильно? - PullRequest
0 голосов
/ 06 мая 2018

Я хочу получить регистрационную форму ниже:

  • если "allParticipants == 1" должно появиться сообщение: "<p>Please fill all form fields. Your tickets will be send to <b>{{ (\Auth::check()) ? Auth::user()->email : old('email')}}</b>.</p>" (это работает)
  • иначе, если "allParticipants == 0" и нет пользовательских вопросов, то есть "$selectedRtype['questions']" равно empty, должно появиться сообщение "<p>Is not necessary additional info. Your tickets will be send to "<b>{{ (\Auth::check()) ? Auth::user()->email : old('email')}}</b></p>" (это работает)
  • если "allParticipants == 0" и есть пользовательские вопросы, то есть "$selectedRtype['questions']" не empty, то должно появиться сообщение "<p>Your tickets will be send to <b>{{ (\Auth::check()) ? Auth::user()->email : old('email')}}</b>.You only need to answer to the custom questions below.</p>" (это не работает)

Но это не работает для третьего сценария, когда "if "allParticipants == 0" и есть нестандартные вопросы ", появляется сообщение" <p>Is not necessary additional info. Your tickets will be send to "<b>{{ (\Auth::check()) ? Auth::user()->email : old('email')}}</b></p> ", но сообщение, которое должно появиться в этом случае" <p>Your tickets will be send to <b>{{ (\Auth::check()) ? Auth::user()->email : old('email')}}</b>.You only need to answer to the custom questions below. </p>».

Вы знаете, где проблема?

// образуем часть где условия:

<form method="post" id="step1formfree" action="">
    {{csrf_field()}}
    @if (!is_null($allParticipants) && is_int($allParticipants))
        @if($allParticipants == 1)
            <p>Please fill all form fields. Your tickets will be send to <b>{{ (\Auth::check()) ? Auth::user()->email : old('email')}}</b>.</p>
        @else
            // if there are no custom questions the message should be only "Is not necessary additional info. Your tickets will be sent to"
            @if(is_null($selectedRtype['questions']))
                <p>Is not necessary additional info. Your tickets will be sent to
                    <b>{{ (\Auth::check()) ? Auth::user()->email : old('email')}}</b></p>
            // if the user selected in the previous page tickets that have associated custom questions the message should be "Your tickets will be send to....You only need to answer to the custom questions below."
            @else
                <p>Your tickets will be send to <b>{{ (\Auth::check()) ? Auth::user()->email : old('email')}}</b>.
                    You only need to answer the custom questions below.
                </p>
            @endif
        @endif
    @endif

{{dd($selectedRtype['questions'])}} показывает:

Collection {#236 ▼
  #items: []
}

// заполнить форму

<form method="post" id="step1formfree" action="">
    {{csrf_field()}}
    @if (!is_null($allParticipants) && is_int($allParticipants))
        @if($allParticipants == 1)
            <p>Please fill all fields. Your tickets will be send to <b>{{ (\Auth::check()) ? Auth::user()->email : old('email')}}</b>.</p>
        @elseif(!is_null($selectedRtype['questions']))
           <p>Your tickets will be send to <b>{{ (\Auth::check()) ? Auth::user()->email : old('email')}}</b>.You only need to answer to the custom questions below.</p>
        @else
           <p>Is not necessary additional info. Your tickets will be send to "<b>{{ (\Auth::check()) ? Auth::user()->email : old('email')}}</b></p>
        @endif

        <span id="userData" data-name="{{ auth()->user()->name }}" data-surname="{{ auth()->user()->surname }}"></span>

        @foreach($selectedRtypes as $k => $selectedRtype)
            //{{dd($selectedRtype)}}
            @foreach(range(1,$selectedRtype['quantity']) as $val)
                @if($allParticipants == 1)
                    <h6>Participant - {{$val}} - {{$k}}</h6>
                    <div class="form-check">
                        <input class="form-check-input" type="checkbox" id="fill_auth_info{{ $val }}" data-id="{{ $k }}_{{ $val }}"name="fill_with_auth_info">
                        <label class="form-check-label d-flex align-items-center" for="fill_auth_info{{ $val }}">
                            <span class="mr-auto">Fill with auth user info.</span>
                        </label>
                    </div>
                    <div class="form-group font-size-sm">
                        <label for="name{{ $k }}_{{ $val }}" class="text-gray">Name</label>
                        <input type="text"  id="name{{ $k }}_{{ $val }}" name="participant_name[]" required class="form-control" value="">
                    </div>
                    <div class="form-group font-size-sm">
                        <label for="surname{{ $k }}_{{ $val }}" class="text-gray">Surname</label>
                        <input type="text" id="surname{{ $k }}_{{ $val }}" required class="form-control" name="participant_surname[]" value="">
                    </div>
                    @foreach($selectedRtype['questions'] as $customQuestion)
                        <div class="form-group">
                            <label for="participant_question">{{$customQuestion->question}}</label>
                            <input type="text"
                                   @if($customQuestion->pivot->required == "1") required @endif
                                   class="form-control" name="participant_question[]">
                            <input type="hidden" name="participant_question_required[]"
                                   value="{{ $customQuestion->pivot->required }}">
                            <input type="hidden" value="{{ $customQuestion->id }}" name="participant_question_id[]"/>
                        </div>
                    @endforeach
                @else
                    <input type="hidden" value="foo" name="participant_name[]"/>
                    <input type="hidden" value="bar" name="participant_surname[]"/>
                @endif
                <input type="hidden" name="rtypes[]" value="{{ $selectedRtype['id'] }}"/>
            @endforeach
                    <div class="form-group">
            @if ($allParticipants == 0)
                @foreach($selectedRtype['questions'] as $customQuestion)
                        <label for="participant_question">{{$customQuestion->question}}</label>
                        <input type="text"
                               @if($customQuestion->pivot->required == "1") required @endif
                               class="form-control" name="participant_question[]">
                        <input type="hidden" name="participant_question_required[]"
                               value="{{ $customQuestion->pivot->required }}">
                        <input type="hidden" value="{{ $customQuestion->id }}" name="participant_question_id[]"/>
                    </div>
                @endforeach
            @endif
        @endforeach
    @endif
    <input type="submit" href="#step2"
           id="goToStep2Free" class="btn btn-primary btn float-right next-step" value="Go to step 2"/>
</form>

1 Ответ

0 голосов
/ 06 мая 2018

Хорошая работа, показывая дамп для вопросов: {{dd($selectedRtype['questions'])}}.

Как насчет упрощения проверки if (и dd) до: @if( $selectedRtype->questions->count())? Это может немного облегчить отладку / чтение для вас, а также приблизить к тому, что вы пытаетесь сказать в человеческом смысле. Взгляните на:

Документы Laravel для счета ()

Помните, с вашим dd выше, вы видели, что экземпляр Illuminate \ Support \ Collection всегда возвращается, даже если результатов нет. Вы в основном проверяете, что $ x = new stdClass; if ($ x) {...}, который будет всегда возвращать true (или всегда false для проверки is_null).

Вполне возможно, что если проверка проверяет значение, отличное от того, когда вы dd - теоретически вы на 100% корректны - на основе возвращаемой коллекции она должна быть ложной в проверке is_null, но это не так , Я думаю, что если вы проверите счет или ! $selectedRtype->questions->isEmpty() ... или даже $selectedRtype->questions->first(), это может выявить проблему.

** ПРИМЕЧАНИЕ - полная форма и раздел разные. Код раздела имеет if-check для вопросов. Похоже, «Полная форма» проверяет только всех участников. Возможно ли, что вы просто не включили код в окончательную форму?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...