Laravel: Getting plain text while using Form class - laravel

I am a beginner of laravel. I have just installed "illuminate/html": "~5.0" with the help of link http://www.ekoim.com/blog/fix-class-form-html-not-found-laravel-5/
Now when I tried using of {{ Form::open() }} {{ Form::close() }} in view file. It is returning form in plain text format to browser.
<form method="POST" action="http://project.dev" accept-charset="UTF-8"><input name="_token" type="hidden" value="qNbi3DD1YGQncOv3PRBWl1l6BxVViWZnleVAmniS"></form>
I am attaching screenshot here.
Is there anything I forgot to do in order to this code to work?

Unlike Laravel 4, in Laravel 5 the content between {{ }} is now escaped by default. To output unescaped content you need to use {!! !!}. So in your case:
{!! Form::open() !!} {!! Form::close() !!}
Read more in the Laravel Templates Docs.

Related

Laravel blade - double echo statement

I am already inside a {!! !!}
{!! do_shortcode('[searchandfilter id="27"]') !!}
I am now passing data to this partial file, and need to update that id=""
My thought was to add: {{ }} however it's not printing out because I am already inside of the {!! !!}.
{!! do_shortcode('[searchandfilter id="{{ $form_id }}"]') !!}
Any idea how to concatenate this $form_id inside this blade echo?
Solved it, forgot to try the regular concatenation method:
{!! do_shortcode('[searchandfilter id="'. $form_id .'"]') !!}
Actually, the issue is that you used simple quotes ''. PHP doesn't parse PHP variables inside those.
The following options should work:
{!! do_shortcode("[searchandfilter id='{$form_id}']") !!}
or
{!! do_shortcode("[searchandfilter id='$form_id']") !!}

Changing laravel form to html form

Hi i created a form with laravel form helpers but i want to change it to a standard html form. The issue i am having is with the "PUT" function, when i try to edit my posts no data is displayed so i think my form properties are wrong.
Form header
<form method="post" action="{{route('posts.update',[$post->id])}}" enctype="multipart/form-data">
{{csrf_field()}}
{{method_field('put')}}
<input type=""text" name="name" class="name">
<input type=""text" name="body" class="body">
<button></button>
</form>
(--UPDATED--)
Laravel Form
{!! Form::model($post, ['route' => ['posts.update', $post->id], 'method' => 'PUT']) !!}
{{ Form::label('name', 'Name:') }}
{{ Form::text('name', null, ["class" => 'form-control input-lg']) }}
{ Form::label('body', 'Body:') }}
{{ Form::text('body', null, ["class" => 'form-control input-lg']) }}
{{ Form::submit('Save Changes', array('class' => 'btn btn-success btn-block')) }}
{{ Form::close() }}
I want the blog data to be displayed in the form for me to edit.. When i use form helpers it works fine
Any help will be much appreciated
Thanks
Ash
Ash,
I don't see the Laravel form code here to compare the two, but the easiest way to convert the Laravel form to straight HTML is to view source on the generated form and copy the generated HTML code back into the blade. Then you can replace populated data with variables.
(--UPDATED--)
Hence, put this back into your blade:
{!! Form::model($post, ['route' => ['posts.update', $post->id], 'method' => 'PUT']) !!}
{{ Form::label('name', 'Name:') }}
{{ Form::text('name', null, ["class" => 'form-control input-lg']) }}
{ Form::label('body', 'Body:') }}
{{ Form::text('body', null, ["class" => 'form-control input-lg']) }}
{{ Form::submit('Save Changes', array('class' => 'btn btn-success btn-block')) }}
{{ Form::close() }}
and then copy the HTML output for the "put" action. Or, if you're on the current version of Laravel, you can simply use the put method as follows:
#method('PUT')
(see https://laravel.com/docs/5.8/blade)
(--ORIGINAL--)
Also, you didn't mention what version of Laravel you're on. The syntax for inserting fields into the blade varies.
(--UPDATED--)
#kapitan, you're right. I "learned" that from using LaraShift telling me that all my {{ $field }} needed to be changed to {!! $field !!} to upgrade my app. The syntax has changed as follows.
In older versions of Laravel, variables inserted with {{ $field }} were UNescaped, and variables inserted with {{{ $field }}} were escaped.
In newer versions of Laravel, variables inserted with {{ $field }} are escaped, and variables inserted with {!! $field !!} are UNescaped. So the meaning of {{ $field }} has reversed from older versions to newer versions.

the PUT method does not send messages

if necessary, I will also put the controller in check although it seems to
me that something is wrong with the method because on the output it shows me a "no message" error and nothing more
is on a piece of my view and the PUT method
{!! Form::model($cattle_inventory, array('route'=>
['cattle_inventories.update',$cattle_inventory->id,'method'=>'PUT']))!!}
<div class="form-group">
{!! Form::label('cow_name','Podaj NazwÄ™ krowy') !!}
{!! Form::text('cow_name',null, ['class'=>'form-control']) !!}
</div>
Route
Route::resource('cattle_inventories','Cattle_inventoryController')->middleware('verified');
The documentation states:
HTML forms do not support PUT, PATCH or DELETE actions. So, when defining PUT, PATCH or DELETE routes that are called from an HTML form, you will need to add a hidden _method field to the form. The value sent with the _method field will be used as the HTTP request method:
<form action="/foo/bar" method="POST">
#method('PUT')
#csrf
</form>
Hence you need to adjust your form as such. #method('PUT') simply generates the following HTML:
<input type="hidden" name="_method" value="PUT">
You can try this with Laravel collective
{!! Form::open(['route'=>['your.route', $id]]) !!}
// laravel <=5.5
{!! Form::hidden('_method', 'PUT') !!} //or {{ method_field('PUT') }}
//laravel >=5.6
#method('PUT')
{!! Form::close() !!}
Laravel collective Form model binding
{{ Form::model($cattle_inventory, ['route' => ['cattle_inventories.update', $cattle_inventory->id]]) }}

Escape VueJS data binding syntax in Laravel Blade?

Laravel templating language Blade and VueJS data binding syntax are very similar.
How can I escape VueJS data binding syntax when in a *.blade.php file?
Example:
<div>
<!-- Want it with VueJS -->
{{ selectedQuestionDesc }}
</div>
<div>
<!-- Want it with Laravel Blade -->
{{ $selectedQuestionDesc }}
</div>
While asking the question I discovered that you can escape Laravel's Blade by prepending an # sign before the double brackets {{}} or the {!! !!} html rendering brackets.
So here is the answer:
<div>
<!-- HTML rendering with VueJS -->
#{{ selectedQuestionDesc }}
<!-- Data binding with VueJS -->
#{{ selectedQuestionDesc }}
</div>
<div>
<!-- HTML with Laravel Blade -->
{!! $selectedQuestionDesc !!}
<!-- Variable binding with Laravel Blade -->
{{ $selectedQuestionDesc }}
</div>
In order to output real HTML, you will need to use the v-html directive:
<p>Using v-html directive: <span v-html="rawHtml"></span></p>

Input Validation with parsley.js on Laravel Blade

first i use laravel blade for my input from, like this
{{ Form::open('practicums/'.$practicums->id, 'PUT') }}
<table align="center">
<tr>
<td>{{ Form::label('name', 'Practicum Name') }}</td>
<td width="75px"></td>
<td>{{ Form::text('name', $practicums->name) }}</td>
</tr>
</table>
i want to use parsley.js to validate the input, i add
data-validate="parsley"
as
{{ Form::open('practicums/'.$practicums->id, 'PUT', array('data-validate' => 'parsley')) }}
but when i add parsley.js parameters on input form (like: data-type,data-required, ets) it's error. then i use 'old' input form like
<input type="text" id="name" name="name" data-required="true"/>
it works.
How to use the parsley.js parameters in Laravel Blade?
Can i still use input form from Laravel Blade with parsley.js, or i should use the old method?
Thanks before.
maybe you should share what's the error it appear ?
i m using the parsley with laravel 4 without any problem, this is my sample code
{{ Form::text('name',Input::old('name'),array('id'=>'name','data-required'=>'true','data-required-message'=>'Name Required','placeholder'=>'Please enter name')) }}
You should do like this
{{ Form::open('practicums/'.$practicums->id, 'PUT', array('data' => 'parsley-validate')) }}
This might help you.
{!! Form::open(['route' => 'posts.store','data-parsley-validate'=>'']) !!}
{{Form :: label('title','Title:')}}
{{Form:: text('title',null,array('class'=>'form-control','required'=>'','max length'=>'255'))}}
{{Form :: label('slug','Slug:')}}
{{Form::text('slug',null,["class"=>'form-control','required'=>'','min length'=>'5','max length'=>'255'])}}
{{Form::label('body','Post Body:')}}
{{Form::textarea('body',null,array('class'=>'form-control','required'=>''))}}
{{Form::submit('Create Post',array('class'=>'btn btn-success btn-block','style'=>'margin-top:20px;'))}}
{!! Form::close() !!}

Resources