Laravel 4 - Input::old за радио бутони

Чудех се дали някои момчета от Laravel могат да помогнат.

Имам формуляр, в който имам 2 бутона за избор, когато формулярът се изпрати, той минава през валидатора, ако валидаторът не успее, той се връща към формуляра, попълва полетата с въведените данни и показва съобщения за грешка.

Изглежда не мога да направя това за бутони за избор, ако някой бъде щракнат, когато формулярът е изпратен и има грешка, той се връща към формуляра с всичко попълнено ОСВЕН бутонът за избор, който е маркиран, сега е празен.

Моите радио бутони са както следва:

<input type="radio" name="genre" value="M" class="radio" id="male" />
<input type="radio" name="genre" value="F" class="radio" id="female" />
<span class="error">{{ $errors->first('genre') }}</span>

Всяка помощ ще бъде високо оценена.


person BigJobbies    schedule 12.06.2013    source източник


Отговори (7)


Можете да направите това:

<input type="radio" name="genre" value="M" class="radio" id="male" <?php if(Input::old('genre')== "M") { echo 'checked="checked"'; } ?> >
<input type="radio" name="genre" value="F" class="radio" id="female" <?php if(Input::old('genre')== "F") { echo 'checked="checked"; } ?> >
person JasonMortonNZ    schedule 12.06.2013
comment
Хей, това ще провери мъжкия радио бутон по подразбиране, но няма ли? - person BigJobbies; 12.06.2013
comment
Да, би могло, можете да го превключите, така че женският да е по подразбиране. Но ако искате, можете да поставите оператор if и в двете полета за въвеждане. - person JasonMortonNZ; 12.06.2013
comment
Не искате ли някой радио вход да бъде избран по подразбиране? Актуализирах кода си, така че нито един вход не се проверява по подразбиране. - person JasonMortonNZ; 12.06.2013

Можете да опитате това, като използвате готовото HTML радио на Laravel... Квадратчета за отметка и радио на Laravel Docs Form

Използвайки острието,

{{ Form::radio('genre', 'M', (Input::old('genre') == 'M'), array('id'=>'male', 'class'=>'radio')) }}
{{ Form::radio('genre', 'F', (Input::old('genre') == 'F'), array('id'=>'female', 'class'=>'radio')) }}

Или просто php,

echo Form::radio('genre', 'M', (Input::old('genre') == 'M'), array('id'=>'male', 'class'=>'radio'));
echo Form::radio('genre', 'F', (Input::old('genre') == 'F'), array('id'=>'female', 'class'=>'radio'));
person Melvin    schedule 12.06.2013
comment
Виждам това „Радиото на метода не съществува“. когато използвам това - person BigJobbies; 12.06.2013
comment
Не изглежда, че въпросният код използва шаблони за острието или помощниците на laravel HTML / Form - person JasonMortonNZ; 12.06.2013
comment
Ами сега... Просто предлагам... тъй като той спомена laravel... Наздраве - person Melvin; 13.06.2013
comment
@BigJobbies току-що го редактира.. използвайте Form::radio() вместо HTML::radio().. Лошото ми.. - person Melvin; 13.06.2013
comment
+1 Тук обаче няма нужда от троичен елемент, просто предайте Input::old('genre') == 'M' като стойност на параметъра. - person Jeff Lambert; 04.06.2014
comment
Как мога да използвам това с Form::model? Имам модел User и модел Seller и трябва да получа някои данни за продавача и да ги използвам в квадратче за отметка. - person laviku; 18.10.2014

Грешката е известна: - https://github.com/laravel/laravel/issues/2069 - https://github.com/laravel/framework/issues/1564

Имате временно решение във втората връзка.

person thujohn    schedule 12.06.2013
comment
Това всъщност не отговаря на зададения въпрос. - person JasonMortonNZ; 12.06.2013
comment
Прав си, това всъщност не отговаря, но се надявам скоро да се оправи :) - person thujohn; 12.06.2013

Току-що се натъкнах на това и не искам да продължавам да повтарям подобни условия във всяка форма, така че създадох функция в моя помощен клас.

Helper.php:

class Helper {

    // other functions

    public static function oldRadio($name, $value, $default = false) {
        if(empty($name) || empty($value) || !is_bool($default))
            return '';

        if(null !== Input::old($name)) {
            if(Input::old($name) == $value) {
                return 'checked';
            } else {
                return '';
            }
        } else {
            if($default) {
                return 'checked';
            } else {
                return '';
            }
        }

        // Or, short version:
        return null !== Input::old($name) ? (Input::old($name) == $value ? 'checked' : '') : ($default ? 'checked' : '');
    }
}

И така, сега в моите формуляри просто го използвам така:

<label>Please select whatever you want</label>
<div class="radio-inline"><label><input type="radio" name="whatever" value="1" required {{ Helper::oldRadio('whatever', '1', true) }}> One</label></div>
<div class="radio-inline"><label><input type="radio" name="whatever" value="2" {{ Helper::oldRadio('whatever', '2') }}> Two</label></div>
<div class="radio-inline"><label><input type="radio" name="whatever" value="3" {{ Helper::oldRadio('whatever', '3') }}> Three</label></div>

Всяка опция предава името и стойността си на помощната функция и избраната преди това ще отпечата „отметнато“. Освен това дадена опция може да предаде „true“ като трети параметър, така че да бъде избрана, ако няма стар вход.

person Pedro Moreira    schedule 21.03.2014

Използване с Bootstrap и автоматична проверка

Добавете този код в края на файла: app/start/global.php

//...

Form::macro('radio2', function($group ='group-name', $value_model = 'value-model', $label ='label-radio', $value_radio = 'value-radio', $attrs = array())
{

  $item  = "<div class='radio'>";
  $item .=   "<label>";
  $item .=      Form::radio($group, $value_radio, ($value_model == $value_radio) ? true : false, $attrs);
  $item .=      $label;
  $item .=   "</label>";
  $item .= "</div>";

  return $item;
});

Във вашия изглед.php

{{ Form::radio2('status', Input::old('status'), 'Online', '1', array()) }}
{{ Form::radio2('status', Input::old('status'), 'Offline', '0', array()) }}

Краен резултат:

въведете описание на изображението тук

person Ricardo Canelas    schedule 18.07.2014

Опитах просто да използвам Input::get() вместо Input::old().... и се получи!!{{Form::radio('estado','V',(Input::get('estado')=="V"))}}

person roberto    schedule 16.02.2015

Моят подход е вложена стенограма if/else израз със синтаксис на острието. Това решение взема предвид и първоначалната стойност, зададена в базата данни.

<div class="form-check form-check-inline">
    <input class="form-check-input" type="radio" name="sex" id="male" value="male"{!! ((old('sex') == 'male') ? ' checked="checked"' : ((empty(old('sex')) && $user->sex == 'male') ? ' checked="checked"' : '')) !!}/>
    <label class="form-check-label" for="male">Männlich</label>
</div>
<div class="form-check form-check-inline">
    <input class="form-check-input" type="radio" name="sex" id="female" value="female"{!! ((old('sex') == 'female') ? ' checked="checked"' : ((empty(old('sex')) && $user->sex == 'female') ? ' checked="checked"' : '')) !!}/>
    <label class="form-check-label" for="female">Weiblich</label>
</div>

Тествано с Laravel 5.7.

person Kronzeuge    schedule 05.02.2019