- Instructiuni foreach(), forelse() si while()
- Obiectul $loop
- Includere Sub-View

Blade template contine functii pentru structuri de control comune cu PHP, cum sunt afirmatiile conditionale si instructiuni de parcurgere array.

Conditii if()

Puteti utiliza conditii if() folosind directivele: @if, @elseif, @else si @endif. Aceste directive functioneaza identic cu omologii lor PHP.
@if(count($records) === 1)
 I have one record.
@elseif(count($records) > 1)
 I have 1 records.
@else
 I don't have any records.
@endif

Verificare daca o sesiune exista

Pentru a verifica in template daca o anumita sesiune exista, folositi: @if(session('SESSION_KEY')).
@if(session('SESSION_KEY'))
  do something with session key
@else
  session key dosen't exist
@endif
- Sau: @if(Session::has('SESSION_KEY')).
@if(Session::has('SESSION_KEY'))
  do something with session key
@else
  session key dosen't exist
@endif

@unless si @endunless

@unless este inversul lui @if.
@unless ($condition) este la fel ca si PHP-ul: if(!$condition)
@unless(Auth::check())
 You are not signed in.
@endunless

@isset si @empty

Pe langa directivele conditionale, puteti folosi instructiunile @isset si @empty la fel ca functiile PHP respective:
@isset($records)
 $records is defined and is not null.
@endisset

@empty($records)
 $records is "empty".
@endempty

Instructiuni foreach(), forelse() si while()

Blade furnizeaza directive simple pentru a parcurge date din array si obiecte PHP: @for , @foreach , si @while. Functioneaza in Blade la fel ca in PHP:
@for($i=0; $i<8; $i++)
 Current value: 0<br>
@endfor

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

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

@forelse

@forelse este un @foreach care permite sa aplici un callback daca obiectul specificat este gol.
@forelse($users as $user)
 <li>{{ $user->name }}</li>
@empty
 <p>No users</p>
@endforelse

@continue si @break

La fel ca in PHP, puteti sa sariti peste iteratia curenta (cu @continue) sau sa opriti parcurgerea (cu @break):
@foreach($users as $user)
  @if($user->type == 1)
    @continue
  @endif

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

  @if($user->nr == 5)
    @break
  @endif
@endforeach
- Puteti sa includeti conditia direct in $continue si $break:
@foreach($users as $user)
  @continue($user->type == 1)

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

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

Obiectul $loop

Cand folositi foreach(), forelse() si while(), se creaza automat un obiect $loop in acea instructiune de parcurgere. Acest obiect contine proprietati utile:


- Exemplu:
@foreach($users as $user)
  @if($loop->first)
   This is the first iteration.
  @endif

  @if($loop->last)
   This is the last iteration.
  @endif

 <p>This is user {{ $user->id }}</p>
@endforeach
- Intr-o instructiune de parcurgere imbricata, puteti accesa obiectul $loop al instructiunii parinte prin proprietatea $loop->parent:
@foreach($users as $user)
  @foreach($user->posts as $post)
    @if($loop->parent->first)
     This is first iteration of the parent loop.
    @endif
  @endforeach
@endforeach

Includere Sub-Views

Directiva @include permite sa includeti in template un alt fisier view.
Variabilele din template pot fi folosite in view-ul inclus:
@include('sub_view')
Puteti sa transmiteti date suplimentare la view-ul inclus.
- Este indicat sa folositi directiva @includeIf, pentru a evita erori daca view-ul specificat nu exista.
@includeIf('sub_view', ['some'=>'data'])

@push cu @stack

Cu @push() si @stack() puteti defini bucati de template care pot fi refolosite in alt loc din acel view sau si in cele incluse.
//define push-stacks in scripts.blade.php

@push('script1')
<script src="/scripts_1.js"></script>
@endpush

@push('script2')
<script>
//other script
</script>
@endpush
Pentru a renda continutul unui @push, adaugati numele in directiva @stack():
@include('scripts')

@stack('script1')
Puteti folosi @include() si @stack() cu nume dinamic:
@includeIf('view_name'. $id)

@isset($js)
@stack('script'. $js)
@endisset

Exemplu practic

1. Copiati urmatorul cod si salvati-l intr-un fisier "resources/views/head.blade.php".
{{-- Define two js script push-stacks --}}
@push('script1')
<script>
alert('script_1');
</script>
@endpush

@push('script2')
<script>
alert('script_2');
</script>
@endpush

<!doctype html>
<html lang="{{app()->getLocale()}}">
<head>
<meta charset="utf-8">
<title>{{$title}}</title>
</head>
2. Copiati urmatorul cod si salvati-lintr-un fisier "resources/views/page.blade.php". Acesta include view-ul 'head' si foloseste un @stack javascript cu un nume variabil din $js.
@include('head')

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

@isset($js)
@stack('script'. $js)
@endisset
</body>
</html>
Am folosit afirmatia {!! $content !!} pentru a folosi cod HTML in $content.

3. Acum vom crea un controller pentru datele paginii.
Adaugati acest cod intr-un fisier "app/Http/Controllers/TestBlade.php".
<?php
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>',
      'js'=>$js
    ];

    return view('page', $data);
  }
}
4. Acum vom defini un Route pentru "/page{id?}", care foloseste controller-ul TestBlade.php.
Adaugati urmatorul cod in fisierul routes/web.php:
//calls page() method of TestBlade controller
Route::get('/page{id?}', 'TestBlade@page')->where('id', '[0-9]*');
5. Accesati in browser adresele URL urmatoare pentru a vedea rezultatul view-ului si alert-ul scriptului javascript din stack-ul folosit conform $id.
//localhost:8000/page

//localhost:8000/page3

//localhost:8000/page9

- Documentatie: Laravel - Blade Control Structures

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Care tag creaza un text ingrosat?
<q> <strong> <em>
<p>Adresa: <strong>http://CoursesWeb.net/</strong> - Tutoriale.</p>
Care din aceste coduri CSS afiseaza textul ingrosat?
text-size: 18px; font-style: italic; font-weight: 800;
#id {
  font-weight: 800;
}
Ce functie JavaScript apeleaza o alta functie, in mod repetat, la un anumit interval de timp?
setInterval() setTimeout() push()
function someFunction() { alert("CoursesWeb.net"); }
setInterval("someFunction()", 2000);
Clic pe variabila definita corect in PHP.
var vname = 8; $vname = 8; $vname == 8;
$vname = 8;
echo $vname;
Care din urmatoarele forme ale verbului "travel" (a calatori) e la timpul Prezent Perfect?
have traveled shall travel had traveled
We have traveled in space.
- Noi am calatorit (deja) in spatiu.
Care din urmatoarele forme ale verbului "pintar" (a picta) se foloseste la Trecutul Imperfect?
ir a pintar pintaba pintó
La niña pintaba un arco iris.
- Fetita picta un curcubeu.
Laravel Blade Template - Controlul Structurii

Last accessed pages

  1. Confusable words - Cuvinte confundabile - Test Engleza (1249)
  2. Confusable words - Cuvinte confundabile (2553)
  3. Substantivul din limba engleza - The Noun (22256)
  4. Data si Ora in engleza - Date and Time (6766)
  5. Gramatica limbii engleze - Prezentare Generala (89255)

Popular pages this month

  1. Gramatica limbii engleze - Prezentare Generala (3239)
  2. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (1498)
  3. Creare si editare pagini HTML (1243)
  4. Curs HTML gratuit Tutoriale HTML5 (1093)
  5. Prezentul simplu si continuu - Present Tense Simple and Continuous (956)