I am using a checkbox in a form, for some reasons I can't store the value of the checkbox status (checked or unchecked).
I am using form model binding.
My form is:
{!! Form::model($profile, ['method' => 'PATCH', 'action' => ['ProfilesController#update', $profile->id]]) !!}
<div class="form-group">
{!! Form::label('wifi', 'Wifi') !!}
{!! Form::checkbox('wifi','yes', $profile->wifi) !!}Wifi
</div>
{!! Form::close() !!}
My Schema:
$table->boolean('wifi')->nullable();
But I also tried it with an integer
I can't figure out what I am doing wrong
Your this piece of code
{!! Form::checkbox('wifi','yes', $profile->wifi) !!}Wifi
is generating this
<input checked="checked" name="wifi" type="checkbox" value="yes">
Which means that you are sending the value yes to the server but your column data type is not varchar/text. You set it to boolean.
update your code to this because you are using form model binding so no need to popluate it, laravel will do this for you.
{!! Form::checkbox('wifi') !!} Wifi
Also, include your wifi key in fillable and casts array. like so
protected $fillable = [ ..., 'wifi' ];
protected $casts = [ 'wifi' => 'boolean' ];
Note: your schema code
$table->boolean('wifi')->nullable;
nullable is not a property, it is a function. so update it as well
$table->boolean('wifi')->nullable();
After that refersh your database migration
php artisan migrate:refresh
It depends on how are you trying to persist this data.
If you're using save() method, do something like this:
$model->wifi = isset($request->wifi);
PS: I guess it should be ->nullable()
Related
I'm implementing bootstrap-slider in my CRUD, I have implemented it successfully in Create, the problem is when I try to edit it,
I want to get the current value from the Model. Idk how to do this.
This is for PATCH.
<div class="form-group">
<h3 class='box-title text-info'>Percentage</h3>
{!! Form::input('text','percentage',null,['id'=>'ex8', 'data-slider-id'=>'ex1Slider', 'data-slider-min'=>'0', 'data-slider-max'=>'100', 'data-slider-step'=>'5', 'data-slider-value'=>'50']) !!}
</div>
In your form instead of creating a new form. You will bind the form to the model.
{!! Form::model('modelname', [options here] !!}
All the fields will math the model's property values.
Edit
Here is an example
You must used something like this to create a EDIT FORM
{{ Form::model($smartphones, ['method' => 'PATCH', 'url' => 'smartphones/'.$smartphones->id]) }}
You get by using $(your_model)['inputID']...You can use in "data-slider-value"... Something like this
{{ Form::input('text','mem_ram', null, ['id' => 'mem_ram', 'data-slider-value'=>$smartphones['mem_ram']]) }}
I am using form model binding and have the following select input :
{!! Form::select('user_id', $users, old('user_id') ?: Auth::id(), ['class' => 'form-control select2 users']) !!}
I would like to accomplish the following:
In the creation form: select the option where the user_id equals the authenticated user's ID, but if there was old input in the session, select that option instead.
In the edit form: always select the option that is stored in the model.
old('user_id') ?: Auth::id() doesn't seem to work when editing, because it always selects the option of the authenticated user and not the one that is stored in the model.
I believe you already have this line,
{!! Form::Model($users, ['route' => ['admin.user.update', $user->id], 'method' => 'PUT']) !!}
then your code should like this:
{!! Form::select('user_id', $users, isset($selectedUser) ? $selectedUser : null) !!}
at Create function do not pass $selectedUser to view but pass the id in your session,and in your edit function you should pass $selectedUser to view ,which is Auth::user()->id
I am using the HtmlServiceProvider in laravel 5.1 to build my form , I want to set the selected option in select dropdown list tag when I get the data from my model class
My code so far:
{!! Form::model($advertisment,['url'=>'dashboard/edit/advertisment']) !!}
{!! Form::select('Gender', [""=>'Select Gender',"Male"=>'Male', "Female"=>'Female'],0, ['class' => 'form-control', 'id' => 'form_control_6' ,'required']) !!}
{!! Form::close() !!}
Set the 0 parameter to "Male" for example and you will figure it out
If you don't want to override the value from the model, pass in null
I have seen similar questions asked before, but was unable to find a solution to my problem. So I have a ClientController and within it this function
public function edit(Client $client)
{
return view('clients.edit', compact('client'));
}
So that passes the client object to my edit view. This view is pretty much the following
{!! Form::model($client, ['method' => 'PATCH', 'route' => ['clients.update', $client->slug]]) !!}
#include('clients/partials/_form', ['submit_text' => 'Edit Client'])
{!! Form::close() !!}
So it is using a partial for the form. At the moment, the partial looks like so
<div class="form-group">
{!! Form::label('clientName', 'Client Name:') !!}
{!! Form::text('clientName') !!}
</div>
<div class="form-group">
{!! Form::label('clientStatus', 'Client Status:') !!}
{!! Form::select('clientStatus') !!}
</div>
When I visit the edit page for a client, I can see the form. The clientName is populated with the clientName value. The clientStatus is populated if I put it as a text input, but I cant get it to populate within a select as shown above. Furthermore, clientStatus can either be New or Existing. I need the select box to be pre-populated with the status of the client that is being edited, but I need the other option available within the select as well. So if the clientStatus is New, New should be pre-selected within the select box and if I open the select, Existing should be the other option.
What would be the best way to achieve this?
Thanks
Modify your select to include an array of the possible values.
Basic Select - Label is value
{!! Form::select('clientStatus',['New','Existing']) !!}
Key Value Select - Key is value
{!! Form::select('clientStatus',[ 1 => 'New', 2 => 'Existing']) !!}
Form model will then set the value in the select to the one in the model.
More information see the docs.
I use laravel presenters from laracasts video. Basically it doesn't matter that much. What I want is to format output data when I use Form::model. So, for example, I have a phone number input:
<div class="form-group">
{!! Form::label('phone', 'Phone' ) !!}
{!! Form::text('phone', null, ['class' => 'form-control', 'id' => 'phone']) !!}
</div>
In the DB I store phones in e.164 format, but when I output them I want to display them in more readable format. But data-accessors from Laravel won't help me because inside my application I want to use e.164. If I set accessor for phone attribute than I won't be able to get e.164 inside my classes. So, instead of accessors I user presenters, but it doesn't matter that much. Let's say I want to use php number_format function when outputting model attributes inside Form::text. How can I do that?
There's nothing forcing you to have a one to one accessor to field relationship. So you can create a formatted phone attribute to use in the form, and use the phone attribute directly from within your classes.
public function getFormattedPhoneAttribute()
{
return // formatted $this->phone
}
If you already have the presenters set up then you can use them in your form instead of using Form::model.
<div class="form-group">
{!! Form::label('phone', 'Phone' ) !!}
{!! Form::text('phone', $user->present()->phone, ['class' => 'form-control', 'id' => 'phone']) !!}
</div>
Either one of these should work for you, but I would recommend you choose one: Accessors or Presenters, not both.