First Laravel Project.
How to define a place in the view for the echo in controller?
I have sometimes "echoes" in my controller. For example if a MySQL statement has null output it echoes "MySQL select is empty" or after succesfull fileupload: "File upload is succesfull".
Right now it appears outside of the body tag at the top left corner of the screen. I want to place it inside the main section or a modall.
You want to redirect back with errors
return redirect()->back()->withErrors(['mysql' => 'MySQL select is empty']);
And then get it in the view (modal)
#if($errors->any())
#foreach($errors->all() as $error)
<li>{{ $error }}</li>
#endforeach
#endif
You can watch this laracast for more about errors: https://laracasts.com/series/laravel-from-scratch-2017/episodes/12
I did a redirect in laravel:
return redirect('admin')->with($returnData);
$returnData is a string that contains a bootstrap info div with the result from the controller. Almost everything is working except when the page loads again it shows the html on the page as if it were text, brackets and everything. If I use this:
#if(!empty(Session::get('error'))) {{ Session::get('error')}} #endif
Then it shows is as pure text. If I change it to
<?php if(!empty(Session::get('error'))) { echo Session::get('error'); } ?>
It works fine. Im ok keeping it like this but I would rather utilize Blade / Laravel as its supposed to be used so I was wondering if there is a way to have the #if statement show the rendered html and not the text version?
I would recommend returning just the error message then in your view create the div. So if you were to change the layout of the view, you would it in one place.
#if(Session::has('error'))
<div class="alert alert-danger">
{{ Session::get('error')}}
</div>
#endif
hope this help.
To show the rendered HTML you should use {!! $variable->coontent !!} in your view, and this gonna convert your HTML text to render
May this example will help you.
Try this
#if (session('Error'))
<div class="alert alert-success">
{{ session('Error') }}
</div>
#endif
If you want to display plain text from error without any HTML entities you can simply use:
{{ Session::get('error') }}
or
{{ session('error') }}
If you have HTML entities in your variable then use:
{!! Session::get('error') !!}
Try changing your blade code to following.
#if(!empty(Session::get('error')))
{!! Session::get('error') !!}
#endif
I want to translate form errors to other language.
I created language folder: resources/lang/lt and insinde validation.php file with translated text.
In template show errors like this:
#if (count($errors) > 0)
<div class="alert alert-danger">
<strong>Whoops!</strong> There were some problems with your input.<br><br>
<ul>
#foreach ($errors->all() as $error)
<li>{{ $error }}</li>
#endforeach
</ul>
</div>
#endif
But every time I get errors from resources/lang/en/validation.php file, maybe I have somehow use trans function insinde errors loop?
For translation I use mcamara/laravel-localization package. Everything works except errors.
I'm rendering a page that is primarily a form with view::make in Laravel and it is crashing, causing ERR_CONNECTION_RESET. After a long investigation and many red herrings, I started erasing (not commenting) random sections out of the blade file for the view and realized that if I
a) erase 2 of the {{Form}} calls inside this section of the form
b) remove the {{-- and --}} from around this section of the form
{{--
<div class="form-row">
{{ Form::label('foo', 'foo:') }}
{{ Form::text('foo') }}
</div>
<div class="form-row">
{{ Form::label('foo', 'foo:') }}
{{ Form::text('foo') }}
</div>
<div class="form-row">
{{ Form::label('foo', 'foo') }}
{{ Form::text('foo') }}
</div>
--}}
the page will render. I am not sure what exactly the cause here is. There are other blocks above and below, although this is a 3-div commented out section which none of the others are.
Anyone have a clue what is causing this? Running on WAMP if that matters.
Blade comments should only be used for simple remarks or to comment out single-line Blade functions. A single Blade comment cannot be used to comment out multiple lines of code.
Use PHP Block Comments instead. They are still usable in a blade.php file
<?php /*
{{ HTML::form("foo") }};
{{ HTML::form("bar") }};
*/ ?>
Alternatively, comment out your Blade one line at a time:
{{-- HTML::form("foo") --}};
{{-- HTML::form("bar") --}};
Examples of Valid Blade Comments:
Single Blade Function:
{{-- Form::text('foo') --}}
Remark:
{{-- Form Section 1 --}}
Examples of Invalid Blade Comments:
Incorrect syntax:
{{-- Form::text('foo') -- }}
"#" Inside of Blade comment
{{-- #Form::text('foo') --}}
Nested PHP:
{{-- <?php
echo "foo";
echo "bar
?> --}}
Nested Blade:
{{--
{{ HTML::form("foo") }};
{{ HTML::form("bar") }};
--}}
Internals:
Using the sample code from the question, Laravel's Blade Compiler will generate a temporary PHP file containing the following PHP and HTML:
<?php /*
<div class="form-row">
<?php echo Form::label('foo', 'foo:'); ?>
<?php echo Form::text('foo'); ?>
</div>
<div class="form-row">
<?php echo Form::label('foo', 'foo:'); ?>
<?php echo Form::text('foo'); ?>
</div>
<div class="form-row">
<?php echo Form::label('foo', 'foo'); ?>
<?php echo Form::text('foo'); ?>
</div>
*/ ?>
The Blade code inside of the Blade comments are still parsed into PHP. The PHP end tags inside of the PHP block-comment can cause compilation issues:
?> breaks out of PHP mode and returns to HTML mode, and // or #
cannot influence that.
Comments in Blade are very simple!
{{-- Blade comments that wil not appear in the rendered HTML output --}}
You can either do normal PHP comments:
<? /* some comment here */
// or single line comments
# or these :)
?>
I have same problem with laravel 5.1 and PHP 7 (new homestead). The work around was to use this:
<?php /* XXX */?>
instead of this:
{{-- XXX -- }}.
I have a similar symptom and it seems to be related to the length of the comment alone. I tested it with a comment that doesn't contain any PHP code or blade statements at all:
{{--
0123456789abcdef
0123456789abcdef
0123456789abcdef
--}}
I kept adding copies of the repeated line until it crashed. The comment was lexically followed by a blade #if statement, and the corresponding <php if(...): ?> did not end up in the compiled template, but the closing <?php endif; ?> did, resulting in a syntactically invalid compiled template.
It seems to be a bug in the blade compiler and I will report it.
The workaround is to split long blade comments with --}}{{--.
I have Tried the
Nested PHP:
{{-- <?php
echo "foo";
echo "bar";
?> --}}
#TonyArra
While using . It is Not Commenting the Content and prevents from Compiling as HTML
and this is the htmlsource
{{-- foobar --}}
Which i have got
Thats Because If You want To Comment the php Code inside Blade
Try this
<!-- #php echo 'hai'; #endphp -->
OR
<!-- <?php echo 'hai'; ?> -->
and try to view the page source
Blade comments like this one, were the problem in my case:
{{--
#if ($test)
<div>something</div>
#else
<div>something else</div>
#endif
--}}
Simply we have to use a double curly bracket followed by a double hyphen.
This will work for the single line as well multiple lines.
{{-- --}}
Blade Comments
{{-- This comment will not be present in the rendered HTML --}}
Referene: https://laravel-news.com/laravel-blade-comments
I am copying the following code from a *.blade.php file:
#section('content')
<h1>All Users</h1>
#if ($users->isEmpty())
<h2>No Users Found</h2>
#else
#foreach ($users as $user)
<li>{{ link_to("/users/{$user->username}", $user->username) }}</li>
#endforeach
#endif
#stop
This is how it appears when it is pasted into the same file:
#section('content')
<h1>All Users</h1>
#if ($users->isEmpty())
<h2>No Users Found</h2>
#else
#foreach ($users as $user)
<li>{{ link_to("/users/{$user->username}", $user->username) }}</li>
#endforeach
#endif
#stop
I am assuming there is a code style somewhere that is removing the indents for the blade syntax, but I can't find which one. What setting do I need to change?
Generally speaking:
Settings (Preferences on Mac) | Editor | Smart Keys | Reformat on Paste
Why "generally" -- because there is no proper Blade support available in PhpStorm yet (but coming soon) and therefore no separate formatter rules for it. Because of that the aforementioned option most likely be the one responsible for such behaviour.