Почему вместо появления «обязательного» атрибута в элементе формы появляется «1»? - PullRequest
0 голосов
/ 05 июня 2018

У меня есть форма для создания пользовательских вопросов.Пользователь должен ввести вопрос, а также тип поля (текст, длинный текст, флажок, меню выбора, переключатель) для создания пользовательского вопроса.

Затем у меня есть модель Вопроса, в которой есть getHtmlInput () функция для вывода в представлении различных типов на основе пользовательского типа вопроса.

И все работает нормально, проблема в том, что вместо появления атрибута «required» появляется «1» в пользовательских вопросах, которые в сводной таблице «registration_type_questions» имеют столбец «required» как «1».

Знаете ли вы, почему?

Модель вопроса:

class Question extends Model
{
    protected $fillable = [
        'question', 'type', 'conference_id',
    ];

    public static $typeHasOptions = [
        'radio_btn',
        'select_menu',
        'checkbox'
    ];

    public function registration_type(){
        return $this->belongsToMany('App\RegistrationType', 'registration_type_questions')
            ->withPivot('required');
    }

    public function options() {
        return $this->hasMany('App\QuestionOption');
    }

    public function hasOptions() {
        return in_array($this->type, self::$typeHasOptions);
    }


    public function getHtmlInput($name = "", $options = "", $required = false, $class = "", $customtype = false) {

        $html = '';
        $html .= $customtype == 'select_menu' ? "<select name='participant_question' class='form-control' " . ($required ?: " required") . ">" : '';

        if (empty($options)) {
            switch ($customtype) {


                case "text":

                $html .= " 


                    <input type='text' name='participant_question' class='form-control'" . ($required ?: " required") . ">";


                break;

                case "file":

                    $html .= " 


                    <input type='file' name='participant_question' class='form-control'" . ($required ?: " required") . ">";


                    break;

                case "long_text":
                    $html .= "

                <textarea name='participant_question' class='form-control' rows='3'" . ($required ?: " required") . ">"
                        . $name .
                        "</textarea>";

                    break;
            }
        } else {
            foreach ($options as $option) {
                switch ($customtype) {
                    case "checkbox":
                        $html .= " 
                <div class='form-check'>
                    <input type='checkbox' name='participant_question[]' value='" . $option->value . "' class='form-check-input'" . ($required ?: " required") . ">" .
                            '    <label class="form-check-label" for="exampleCheck1">' . $option->value . '</label>' .
                            "</div>";
                        break;
                    case "radio_btn":
                        $html .= " 
                <div class='form-check'>
                    <input type='radio' name='participant_question[]' value='" . $option->value . "' class='form-check-input'" . ($required ?: " required") . ">" .
                            '    <label class="form-check-label" for="exampleCheck1">' . $option->value . '</label>' .
                            "</div>";
                        break;
                    case "select_menu":
                        $html .= "<option value='" . $option->value . "'>" . $option->value . "</option>";
                        break;
                }
            }
        }
        $html .= $customtype == 'select_menu' ? "</select>" : '';

        return $html;
    }
}

Использование getHtmlInput () в представлении:

@if ($allParticipants == 0)
    @foreach($selectedRtype['questions'] as $customQuestion)
        <div class="form-group">
            <label for="participant_question">{{$customQuestion->question}}</label>
            @if($customQuestion->hasOptions() && in_array($customQuestion->type, ['checkbox', 'radio_btn', 'select_menu']))
                {!! $customQuestion->getHtmlInput(
                    $customQuestion->name,
                    $customQuestion->options,
                    ($customQuestion->pivot->required == '1'),
                    'form-control',
                    $customQuestion->type)
                !!}

            @else
                {!! $customQuestion->getHtmlInput(
                    $customQuestion->name,
                    [],
                    ($customQuestion->pivot->required == '1'),
                    'form-control',
                    $customQuestion->type)
                !!}
            @endif
            <input type="hidden"
                   name="participant_question_required[]"
                   value="{{ $customQuestion->pivot->required }}">
            <input type="hidden"
                   value="{{ $customQuestion->id }}"
                   name="participant_question_id[]"/>
        </div>
    @endforeach
@endif

Сгенерированный HTML: (вместо обязательного появляется 1)

<form method="post" action="">
  <div class="form-group">
    <label for="participant_question">Text</label>
    <input type="text" name="participant_question" class="form-control" 1="">
  </div>
  <div class="form-group">
    <label for="participant_question">Checkbox</label>
    <div class="form-check">
      <input type="checkbox" name="participant_question[]" value="check1" class="form-check-input" 1="">    <label class="form-check-label" for="exampleCheck1">check1</label></div> 
    <div class="form-check">
      <input type="checkbox" name="participant_question[]" value="check2" class="form-check-input" 1="">    <label class="form-check-label" for="exampleCheck1">check2</label></div>
  </div>
  <div class="form-group">
    <label for="participant_question">Radio</label>
    <div class="form-check">
      <input type="radio" name="participant_question[]" value="rad1" class="form-check-input" 1="">    <label class="form-check-label" for="exampleCheck1">rad1</label></div> 
    <div class="form-check">
      <input type="radio" name="participant_question[]" value="rad2" class="form-check-input" 1="">    <label class="form-check-label" for="exampleCheck1">rad2</label></div>
  </div>
  <div class="form-group">
    <label for="participant_question">select</label>
    <select name="participant_question" class="form-control" required=""><option value="select1">select1</option><option value="select2">select2</option></select>
  </div>
  <div class="form-group">
    <label for="participant_question">textarea</label>
    <textarea name="participant_question" class="form-control" rows="3" 1=""></textarea>
  </div>
  <div class="form-group">
    <label for="participant_question">file</label>
    <input type="file" name="participant_question" class="form-control" 1="">
  </div>
  <input type="submit" href="#step2" class="btn btn-primary mb-4 float-right next-step" value="Confirm Registration">
</form>

1 Ответ

0 голосов
/ 05 июня 2018

В этом фрагменте кода

($required ?: " required")

Вы ничего не устанавливаете, так как утверждение истинно (обязательно), поэтому оно устанавливает значение по умолчанию, вы говорите, что требуется, когда нет,правильный синтаксис:

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