- Loops
- The $loop object
- Including Sub-Views

Blade template provides convenient shortcuts for common PHP control structures, such as conditional statements and loops.

if Statements

You may construct if statements using the @if, @elseif, @else, and @endif directives. These directives function identically to their PHP counterparts.
@if(count($records) === 1)
 I have one record.
@elseif(count($records) > 1)
 I have 1 records.
 I don't have any records.

Check if a session exists

To check in template if a specified session exists, use: @if(session('SESSION_KEY')).
  do something with session key
  session key dosen't exist
- Or: @if(Session::has('SESSION_KEY')).
  do something with session key
  session key dosen't exist

@unless and @endunless

@unless is the inverse of @if.
@unless ($condition) is the same as PHP: if(!$condition)
 You are not signed in.

@isset and @empty

In addition to the conditional directives, the @isset and @empty directives may be used as convenient shortcuts for their respective PHP functions:
 $records is defined and is not null.

 $records is "empty".


Blade provides simple directives for working with PHP's loop: @for , @foreach , and @while. They work the same in Blade as they do in PHP:
@for($i=0; $i<8; $i++)
 Current value: 0<br>

@foreach($users as $user)
 <p>This is user {{ $user->id }}</p>

@while($item = array_pop($items))
{{ $item->fun() }}<br>


@forelse is a @foreach that allows you to use a callback if the object you’re iterating over is empty.
@forelse($users as $user)
 <li>{{ $user->name }}</li>
 <p>No users</p>

@continue and @break

When using loops you may also skip the current iteration (with @continue) or end the loop (with @break):
@foreach($users as $user)
  @if($user->type == 1)

 <li>{{ $user->name }}</li>

  @if($user->nr == 5)
- You may also include the condition directly in the $continue, and $break directives:
@foreach($users as $user)
  @continue($user->type == 1)

 <li>{{ $user->name }}</li>

  @break($user->nr == 5)

The $loop object

When looping, a $loop object will be available inside of your loop. This object provides a variety of useful properties:

- Example:
@foreach($users as $user)
   This is the first iteration.

   This is the last iteration.

 <p>This is user {{ $user->id }}</p>
- If you are in a nested loop, you may access the parent loop's $loop object via the $loop->parent property:
@foreach($users as $user)
  @foreach($user->posts as $post)
     This is first iteration of the parent loop.

Including Sub-Views

Blade's @include directive allows you to include a Blade view from within another view.
All variables that are available to the parent view will be made available to the included view:
You may also pass an array of extra data to the included view.
Also, it is indicated to use the @includeIf directive, to avoid errors if the specified view not exist.
@includeIf('sub_view', ['some'=>'data'])

@push and @stack

With @push() and @stack() you can define pieces of template that can be rendered somewhere else in that layout or into an included view.
- This can be particularly useful for specifying any JavaScript libraries required by your child views:
//define push-stacks in scripts.blade.php

<script src="/scripts_1.js"></script>

//other script
To render the contents of a @push, pass the name to the @stack() directive:

You can also use @include() and @stack() with dynamic name:
@includeIf('view_name'. $id)

@stack('script'. $js)

Practical example

1. Copy the following code and save it in a "resources/views/head.blade.php" file.
{{-- Define two js script push-stacks --}}


<!doctype html>
<html lang="{{app()->getLocale()}}">
<meta charset="utf-8">
2. Copy the following code and save it in a "resources/views/page.blade.php" file, which includes the 'head' view, and uses a javascript @stack with a variable name in $js.

<div class="content">
{!! $content !!}

@stack('script'. $js)
I used {!! $content !!} statement to use HTML code in $content.

3. Now, we create a controller for pages data.
Add this code in a "app/Http/Controllers/TestBlade.php" file.
namespace App\Http\Controllers;
use Illuminate\Http\Request;

class TestBlade extends Controller {

  //receives the request object, and page ID; returns page view
  public function page(Request $request, $id=1){
    //define which javascript stak to use (set with @push in 'head' view)
    if($id ==1) $js =1;
    else if($id <4) $js =2;
    else $js ='';

    //set array with data to be passed to view() for template
    $data =[
      'title'=>'Title Page '. $id,
      'content'=>'<h3>Content of page'. $id .'</h3>',

    return view('page', $data);
4. Now, set up the route for "/page{id?}" to use the TestBlade.php controller.
Add the following code in the routes/web.php file:
//calls page() method of TestBlade controller
Route::get('/page{id?}', 'TestBlade@page')->where('id', '[0-9]*');
5. Visit the following URLs to see the output of the view, and the alert of the javascript script in the used stack according to $id.



- Documentation: Laravel - Blade Control Structures

Daily Test with Code Example

Which tag is a block element?
<div> <img> <span>
<div>Web Programming and Development</div>
Which CSS code displays the text underlined?
font-style: italic; text-decoration: underline; font-weight: 500;
h2 {
  text-decoration: underline;
Click on the JavaScript function that can access other function after a specified time.
insertBefore() setTimeout() querySelector()
function someFunction() { alert("CoursesWeb.net"); }
setTimeout("someFunction()", 2000);
Click on the instruction that returns the number of items of a multidimensional array in PHP.
count($array) count($array, 1) strlen()
$food =["fruits" =>["banana", "apple"), "veggie" =>["collard", "pea"));
$nr_food = count($food, 1);
echo $nr_food;       // 6
Blade Templates - Control Structures

Last accessed pages

  1. PHP getElementById and getElementsByTagName (27746)
  2. Add Tag to Selected Text in textarea with JavaScript (1626)
  3. JSON syntax in JavaScript (4197)
  4. Recursive function to create Multi-Level Menu in JavaScript (3255)
  5. innerHTML and outerHTML to Get and Replace HTML content (20934)

Popular pages this month

  1. Making DIV Contents Scroll Horizontally, with multiple Div`s inside (2496)
  2. Contact page - CoursesWeb (2392)
  3. Tabs effect with CSS (2391)
  4. Insert, Select and Update NULL value in MySQL (1117)
  5. PHP getElementById and getElementsByTagName (990)