Laravel blade check box

lggg3 picture lggg3 · Nov 17, 2014 · Viewed 91k times · Source

I want to set check-boxes state from database, so I write,

{{ Form::checkbox('asap', null, $offer->asap) }}

But if I want to set 'id' to the check-box like

{{ Form::checkbox('asap', null, $offer->ASAP, array('id'=>'asap')) }}

It always set my check-box state to true. (Before user select it)

So question how set 'id' in blade check-boxes when check-box state is set before user select it?

Answer

Mohamed Salem Lamiri picture Mohamed Salem Lamiri · Jul 15, 2015

I know this question was answered before, in this one I am going to explain step by step how to implement checkboxes with Laravel/blade with different cases ...

So in order to load your checkboxes from the database or to test if a checkbox is checked :

First of all you need to understand how it works, as @itachi mentioned :

{{ Form::checkbox( 1st argument, 2nd argument, 3rd argument, 4th argument ) }}

  • First argument : name
  • Second argument : value
  • Third argument : checked or not checked this takes: true or false
  • Fourth argument : additional attributes (e.g., checkbox css classe)

Example :

{{ Form::checkbox('admin') }} 
//will produces the following HTML
<input name="admin" type="checkbox" value="1">

{{ Form::checkbox('admin', 'yes', true) }}
//will produces the following HTML
<input checked="checked" name="admin" type="checkbox" value="yes">

How to get checkboxes values ? ( in your controller )

Methode 1 :

public function store(UserCreateRequest $request)
{

   $my_checkbox_value = $request['admin'];

  if($my_checkbox_value === 'yes')
     //checked
  else
     //unchecked
  ...
}

Methode 2 :

if (Input::get('admin') === 'yes') {
    // checked
} else {
    // unchecked
}

Note : you need to assign a default value for unchecked box :

if(!$request->has('admin'))
{
    $request->merge(['admin' => 0]);
}

this is nice right ? but how could we set checked boxes in our view ?

For good practice I suggest using Form::model when you create your form this will automatic fill input values that have the same names as the model (as well as using different blade Form:: inputs ..)

{!! Form::model( $user, ['route' => ['user.update', $user->id], 'method' => 'put' ]) !!}
    {!! Form::checkbox('admin', 1, null) !!}
{!! Form::close() !!}

You can also get it like this :

{{ Form::checkbox('admin',null, $user->admin) }}

Okey now how to deal with :

  • multiples checkboxes
  • Add css classe
  • Add checkbox id
  • Add label

let's say we want to get working days from our database Working days

$working_days = array( 0 => 'Mon', 1 => 'Tue', 2 => 'Wed', 
                       3 => 'Thu', 4 => 'Fri', 5 => 'Sat', 6 => 'Sun' );

@foreach ( $working_days as $i => $working_day )
{!! Form::checkbox( 'working_days[]', 
                  $working_day,
                  !in_array($working_days[$i],$saved_working_days),
                  ['class' => 'md-check', 'id' => $working_day] 
                  ) !!}
{!! Form::label($working_day,  $working_day) !!}
@endforeach
//$saved_working_days is an array of days (have 7 days, checked & unchecked)

I've spent sometime to figure out how to deal with multiple checkboxes I hope this can help someone :)