Laravel Course

- 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 used in <table> to create table header cell?
<thead> <th> <td>
  <th>Title 1</th>
  <th>Title 2</th>
Which CSS property sets the distance between lines?
line-height word-spacing margin
.some_class {
  line-height: 150%;
Which function opens a new browser window.
alert() confirm() open()
document.getElementById("id_button").onclick = function(){"");
Indicate the PHP function that returns an array with names of the files and folders inside a directory.
mkdir() scandir() readdir()
$ar_dir = scandir("dir_name");
Blade Templates - Control Structures

Last accessed pages

  1. The Four Agreements (1625)
  2. One Minute Wisdom (1778)
  3. 101 Zen stories (2006)
  4. The Mastery of Love (6776)
  5. Diamond shape with CSS (4210)

Popular pages this month

  1. Courses Web: PHP-MySQL JavaScript Node.js Ajax HTML CSS (271)
  2. Read Excel file data in PHP - PhpExcelReader (93)
  3. PHP Unzipper - Extract Zip, Rar Archives (84)
  4. The Four Agreements (82)
  5. The Mastery of Love (73)