2013-06-02 8 views
5

ich eine Checkbox in einer Ansicht zu erstellen:ungeprüft Checkbox mit "Input :: alt()"

Form::checkbox('test', 'true', Input::old('test', true)); 

Nachdem die Box Abhaken Absenden des Formulars und wird umgeleitet zurück:

return Redirect::back()->withInput()->withErrors($validation); 

Das Kontrollkästchen wird immer noch überprüft - vermutlich, weil 'test' in "Input::old" nicht existiert, so dass es auf den Standardwert zurückgesetzt wird.

Haben Sie Vorschläge, wie Sie das am besten erreichen?

Edit:

ich mit einem etwas hacky Weise habe kommen die Ergebnisse immer ich will:

$isChecked = true; // The default state 
// Check if the form has been returned "withInput" 
if(Input::old()) 
{ 
    $isChecked = Input::old('test', false); // If the field has old data available use that, otherwise it is unchecked 
} 
echo Form::checkbox('test', 'true', $isChecked); 

ich dies für die Wiederverwendung in eine Funktion schreiben werde, aber es scheint,

: zu klären - ein wenig schmerzhaft so keine Kommentare/Vorschläge große

Edit 2 Sorry, wenn nicht klar wäre

  1. Formular geladen mit Checkbox aktiviert
  2. ich das Kontrollkästchen deaktivieren und senden Sie das Formular
  3. Die Form dies nicht bestätigen ich in das Formular
  4. Die Checkbox selbst nachgeprüft zurückgekehrt bin - ich würde erwarten, dass es nicht markiert sein, da pro Benutzer übermittelten Daten

ich nehme an, dies geschieht, weil, wenn ein Kontrollkästchen nicht markiert ist, wird das Element nicht in den Post-Daten enthält

Antwort

5

Dies sollte ausreichend ist

echo Form::checkbox('test', 'true', Input::old('test', true)); 

Wenn Eingang :: alt() nicht existiert, wird es true zurück, Ihr Standard.

+5

Vielen Dank für die Antwort, aber haben Sie diese getestet? Wenn ich das Kontrollkästchen deaktivieren und senden, wird es überprüft, wenn das Formular neu geladen wird - ich beieve, weil Input :: alt ('test') nicht existiert –

+0

@GuyIncognito Dies funktioniert, weil Laravel Formularerstellung überprüft die Sitzung und wenn dort sind irgendwelche alten Formulardaten. 'if (isset ($ this-> Sitzung) &&! $ this-> oldInputIsEmpty() && is_null ($ this-> alt ($ name))) return false;' FormBuilder.php Zeile 639 in Laravel Version 4.2.x- dev –

0

Warum so etwas wie dies nicht tun:

<?php $last_turnaround = (array) Input::old('turnaround'); ?>

{{ Form::checkbox('turnaround', 'normal', in_array('normal', $last_turnaround), array('id' => 'turnaround_normal', 'class' => 'turnaround')) }}

1

Das war auch für mich ein bisschen verwirrend. Aber das habe ich getan.

In meinem Controller,

Session::flash('test', Input::get('test') ? 'true' : 'false'); 

Und in der Ansicht

<?php $test = Session::get('test'); ?> 
<input type="checkbox" id="test" name="test" value="true" <?php echo is_null($test) ? 'checked' : ($test == 'true' ? 'checked' : ''); ?> /> 

So ziemlich viel zusätzliche Sitzung Flash-Daten, um sich zurechtzufinden.

0

Meine Lösung für das gleiche Problem:

1) Validierung des Kästchens entfernen. Logischerweise macht es keinen Unterschied.

2) In meiner Controller-Update-Funktion, habe ich eine if-Anweisung, die isset verwendet, um zu bestimmen, ob der Wert gesendet wurde oder nicht (wenn nicht gesendet, es wurde nicht geprüft und daher falsch).

if ($validation->passes()) 
{ 
    $xxx = $this->xxx->find($id); 
    $xxx->update($input); 
    if (!isset($input['checkbox_attribute'])) { 
     $xxx->checkbox_attribute = false; 
    } 
    $xxx->save(); 
    return Redirect::to('xxx.show'); 
} 
2

Die Checkbox und Sitzungs Mismatch war ein Fehler, der auf Umleitung das Kästchens in Laravel 4.em Der folgenden Code wurde korrigiert bewahren soll:

echo Form::checkbox('payment_method', 'credit'); 

für gruppierte Kontrollkästchen, das so etwas wie verwenden:

echo Form::checkbox('payment_method[]', 'credit'); 

Das sollte auch funktionieren.

** Offensichtlich wollen Sie PAYMENT_METHOD und Kredit mit Ihrem eigenen Attribute zu ersetzen.

9

hatte ich das gleiche Problem. Stellt sich heraus, es war, weil ich die Anweisungen auf gefolgt, wie eine ungeprüfte Checkbox zu schreiben, die sagte:

echo Form::hidden('name', 0); 
echo Form::checkbox('name', 1); 

Das Problem dabei ist, dass auf Formular-Validierung fehl, wenn das Kontrollkästchen aktiviert wurde, Laravel sowohl repopulate wird ‚versteckt 'und ‚Checkbox‘ Felder mit altem Wert, so dass Ihr verstecktes Feld wird immer 1 statt 0 Einfacher Lösung vorlegen nur HTML-Code für das verborgene Feld schreibt stattdessen die Form Helfer der Verwendung:

echo '<input type="hidden" name="name" value="0">'; 
echo Form::checkbox('name', 1); 
+0

Folgte was * Anweisungen *? –

+0

Dies in einem Kommentar hier erwähnt wird: https://www.flynsarmy.com/2015/02/creating-a-basic-todo-application-in-laravel-5-part-3/ – ErnestV

+0

Tnx, fixiert diese es für mich. Mit (alt ('active', $ slide-> active ?? 1) == 1)? true, die im Grunde sagt: wenn oldInput> Slide> 1 == 1, dann wahr, sonst false. "??" kann als Abkürzung für isset verwendet werden, um einen alternativen Wert zu geben, wenn etwas nicht verfügbar ist. –

0

ich habe die gleiches Problem ..

I fi fixierte es wie diese

Form::checkbox('test', 'true', Input::old() ? Input::old('test', false) : true); 

Hoffnung, dass ..

0

Ich hatte das gleiche Problem hilft. Ich am Ende mit der Erstellung dieser Hilfsfunktion:

function is_checked(string $name, $value, $default) : string 
{ 
    $current_defaults = Input::old() ? old($name, 0) : $default; 
    return ($value == $current_defaults) ? 'checked' : ''; 
} 

<input type="checkbox" name="is_acrive" value="1" 
     {{ is_checked('is_active', 1, $user->is_active) }}> 

Multiple Checkbox Version:

function is_checked_multiple(string $name, $value, $defaults) : string 
{ 
    $current_defaults = Input::old() ? old($name, []) : (array)$defaults; 
    return in_array($value, $current_defaults) ? 'checked' : ''; 
} 

@foreach ($plans as $plan) 
    <input type="checkbox" name="plans[]" value="{{ $plan->id }}" 
      {{ is_checked_multiple('plans', $plan->id, $user->plans->pluck('id') }}> 
@endforeach 
+0

Ich versuche Ihre erste Funktion und bekomme den Fehler 'Class 'Input' nicht gefunden' –

+0

'Input' ist veraltet. Verwenden Sie stattdessen "Request" oder "request()". –