TagLaravel

Larava Code Snippet: Components und Slot

Ein Beispiel im Video zu den Neuerung in Laravel 7 mit dem Titel “Supercharged Blade Components” von Jeffrey ist, wie auch in den Kommentaren festgestellt wird, in Minute 3:30 nicht ganz nachvollziehbar. Folgender Code wird (von mir gekürzt) dargestellt:

// File: resources/views/welcome.blade.php
<x-layout>
  <x-slot name="Foobar>
    Foobar Inhalt
  </x-slot>

Inhalt hier
</x-layout>

Daneben gibt es noch ein Components, welcher entsprechend der Defintion <x-layout> auch layouts.blade.php heißen muss:

// File: resources/views/components/layout.blade.php
@if(isset($Foobar))
  Standard-Inhalt
@endif

<div>
{{$slot}}
</div>

Auf den ersten Blick würde man jetzt erwarten, dass “Foobar Inhalt” ausgegeben wird. Dem ist jedoch nicht so, da die definierte Variable $Foobar zwar abgefragt, aber nicht ausgegeben wird. Damit “Foobar Inhalt” angezeigt wird, müßte im layout.blade.php-Components folgendes angepasst werden:

// File: resources/views/components/layout.blade.php
// Old-Version
@if(isset($Foobar))
  Standard-Inhalt
@endif

// New-Version
@if(isset($Foobar))
  $Foobar
@endif

Siehe hierzu auch die offizielle Dokumentation von 5.4

Viel interessanter finde ich jetzt jedoch, dass sich die Components jetzt auch verschachteln lassen. Man kann jetzt also auch folgendes machen:

// File: resources/views/welcome.blade.php
<x-layout>
  <x-slot name="Foobar>
    <x-Foobar variable="wert"/>
  </x-slot>

Inhalt hier
</x-layout>

Somit hat man die Möglichkeit einen Standard-Wert in der jeweiligen Component zu hinterlegen und diesen bei Bedarf in der View zu aktivieren bzw. auch die Möglichkeit den zu überschreiben und ggf. durch eine andere Component zu ersetzen.

Unabhängig davon, kann ich die Videos von Jeff jedem der sich mit Laravel beschäftigt wärmstens empfehlen!

Laravel bei All-Inkl installieren

Für die Installation von Laravel gibt es eine Doku und sogar ein kostenloses Video. Darin wird empfohlen Laravel via Composer zu installieren. Letzteres steht standardmäßig auf einem All-Inkl Hosting zunächst nicht zur Verfügung. Aber All-Inkl stellt eine kleine Anleitung bereit, mittels der Composer installiert werden kann.

Der Aufruf von laravel new blog schlägt jedoch trotzdem mit folgender Meldung fehl sh: composer: command not found, obwohl Composer ordnungsgemäß installiert ist, was mittels dem Aufruf composerüberprüft werden kann.

Ursächlich dafür ist, laut Support von All-Inkl:

Die Verwendung des Befehls “laravel new” ist in der chroot Umgebung nicht möglich, da hier die nötige Verlinkung mit Composer nicht möglich ist. Sie müssen hier den Alternativen Befehl “composer create-project –prefer-dist laravel/laravel ZIEL_ORDER” nehmen.

Dieses Szenario wird auch auf der Installationsseite von Laravel beschrieben.

 

Laravel 6 From Scratch – Cheat Sheet

Das Cheat Sheet ist in permanenter Weiterentwicklung, abhängig davon wie ich schnell ich dazu komme mir die einzelnen Videos nochmals anszuschauen Laravel 6 From Scratch. Entsprechend den Videos werde ich versuchen auch immer jeweils auf die Version 6 zu referenzieren. Ursprünglich hatte ich mir schon alle Videos angeschaut aber eher nebenbei und daher jetzt nochmals richtig:

Die Ordnerstruktur

// Routen
/routes/web.php

// Views
/resources/views/

// Welcome
/resources/views/welcome.blade.php

// Compiled Versions
/storage/framework/views/

 

Routen / Routing: Laravel Docs 6.x Routing

// Standard Route
Route::get('/', function(){
  return view('welcome');
});

// Test Route
Route::get('test', function(){
  return view('test');
});

// Minimalistisch
Route::get('/', function(){
  return "Hello World";
});

// JSON
Route::get('/', function(){
  return ['foo' => 'bar'];
});

// Mit Parameterübergabe (Long Version)
// Url-Example: laravel6.test/?name=FooBar
// View-File: test.blade.php
Route::get('/', function(){
  $name = request('name');

  return view('test', [
    'name' => $name
  ]); 
});

// Mit Parameterübergabe (Short Version) 
// Url-Example: laravel6.test/?name=FooBar 
// View-File: test.blade.php
Route::get('/', function({ 
  return view('test', [ 
    'name' => request('name') 
  ]); 
});


// Wildcard
// URL: laravel6.test/posts/FooBar
// Result: FooBar
Route::get('/posts/{post}, function($post){
  return $post;
});




Blade Template-Engine

// BAD: RAW-Output (Vulnerable for XXS)
<h1><?= $name ?></h1>

// BAD: RAW-Output mit Blade (Vulnerable for XSS)
<h1>{!! $name !!}</h1>

// BETTER: Traditional PHP
<h1><?= htmlspecialchars($name,ENT_Quotes) ?></h1>

// BEST: Laravel Template Engine 
<h1>{{ $name }}</h1>

 

© 2020 BugBlog.de

Theme by Anders NorénUp ↑