Komponenten-Laravel: Unterschied zwischen den Versionen

Aus Vokabulabor
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „= Links = * Laravel = Zielsetzung = Hier werden die Komponenten (benutzerdefinierte HTML-ähnliche Elemente) vorgestellt. = Anonyme Komponenten = Anonyme Komponenten werden als Dateien in /resources/views/components definiert. * Name: in Kebab-Schreibweise (mit Bindestrichen), endet immer mit ".blade.php" = Komponentendefinition = * /resources/views/components/button.blade.php: <pre> @props(['name', 'label' => 'OK', 'width1' => 2, 'width2' => 4]) @…“)
 
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 23: Zeile 23:
* Auf den Wert des Parameters kann mit $&lt;name> zugegriffen werden, jeweils innerhalb einer {{ }} Klammerung.
* Auf den Wert des Parameters kann mit $&lt;name> zugegriffen werden, jeweils innerhalb einer {{ }} Klammerung.
* Es gibt weitere Programmierkonstrukte, jeweils mit '@' beginnend:
* Es gibt weitere Programmierkonstrukte, jeweils mit '@' beginnend:
* @if (&lt;bedingung>) &lt;then-block> @elsif (&lt;bedingung>)  &lt;else-block1> @else &lt;else-block1> @endif
* @if (&lt;bedingung>) &lt;then-block> @elsif (&lt;bedingung>)  &lt;else-block1> @else &lt;else-block2> @endif
* @for (&lt;initialisierung>; &lt;bedingung> &lt;fortschaltung>) &lt;block> @endfor
* @for (&lt;initialisierung>; &lt;bedingung> &lt;fortschaltung>) &lt;block> @endfor
* @foreach (&lt;liste> as &lt;variable>) &lt;block> @endforeach
* @foreach (&lt;liste> as &lt;variable>) &lt;block> @endforeach
Zeile 29: Zeile 29:
== Komponente mit Klammerstruktur ==
== Komponente mit Klammerstruktur ==
* Wenn die Komponente Klammercharakter hat <code>&lt;x-my-component> &lt;block> &lt;/x-my-component></code>, dann wird &lt;block> mit der Variablen $slot referenziert:
* Wenn die Komponente Klammercharakter hat <code>&lt;x-my-component> &lt;block> &lt;/x-my-component></code>, dann wird &lt;block> mit der Variablen $slot referenziert:
* ok-panel.blade.php
* Datei ok-panel.blade.php:
<pre>
<pre>
@prop(['buttonOk' => 'buttonOk', buttonCancel=''])
@prop(['buttonOk' => 'buttonOk', buttonCancel=''])
<div class="my-panel">
<div class="my-panel">
{{ $slot }}
  {{ $slot }}
<p><button name="{buttonOk}">
  <p><button name="{buttonOk}">
@if (! empty($buttonCancel)) <button name="{buttonCancel}">@endif
@if (! empty($buttonCancel))  
</p>
  <button name="{buttonCancel}">@endif
<x-button name="btnOK" label="OK" width1="4" 'width2="3" />
   </p>
<x-ok-panel buttonOk="btnOk">
</div>
   <p>Alles ist gut</p>
</x-ok-panel>
</pre>
</pre>


Zeile 48: Zeile 46:
* Die Parameter werden in der Attributschreibweise von HTML übergeben (Parameatername ist Attributname): buttonOK="&lt;name>"
* Die Parameter werden in der Attributschreibweise von HTML übergeben (Parameatername ist Attributname): buttonOK="&lt;name>"
<pre>
<pre>
<x-button name="btnOK" label="OK" width1="4" 'width2="3" />
<x-ok-panel buttonOk="btnOk">
  <p>Alles ist gut</p>
</x-ok-panel>
</pre>
</pre>
== PHP-Variablen als Parameter ==
== PHP-Variablen als Parameter ==
Zeile 56: Zeile 58:
<p>Der Benutzer heißt {{ $user->name }}.</p>
<p>Der Benutzer heißt {{ $user->name }}.</p>
</pre>
</pre>
* Die Anwendung:
* Die Anwendung in index.blade.php:
<pre>
<pre>
<x-username :user="{{ $user }}" />
<x-username :user="{{ $user }}" />
</pre>
</pre>

Aktuelle Version vom 25. Dezember 2023, 15:47 Uhr

Links

Zielsetzung

Hier werden die Komponenten (benutzerdefinierte HTML-ähnliche Elemente) vorgestellt.

Anonyme Komponenten

Anonyme Komponenten werden als Dateien in /resources/views/components definiert.

  • Name: in Kebab-Schreibweise (mit Bindestrichen), endet immer mit ".blade.php"

Komponentendefinition

  • /resources/views/components/button.blade.php:
@props(['name', 'label' => 'OK', 'width1' => 2, 'width2' => 4])
@if($width1 > 0)
<x-laraknife.col-empty width="{{$width1}}"/>
@endif
<div class="col-md-{{ $width2 }}">
    <button class="bg-primary white expand100" name="btnSubmit" value="{{$name}}">{{$label}}</button>
</div>
  • Mit @props wird eine assoziative Liste von Parametern, eventuell mit Vorbelegung, definiert.
  • Auf den Wert des Parameters kann mit $<name> zugegriffen werden, jeweils innerhalb einer {{ }} Klammerung.
  • Es gibt weitere Programmierkonstrukte, jeweils mit '@' beginnend:
  • @if (<bedingung>) <then-block> @elsif (<bedingung>) <else-block1> @else <else-block2> @endif
  • @for (<initialisierung>; <bedingung> <fortschaltung>) <block> @endfor
  • @foreach (<liste> as <variable>) <block> @endforeach
  • @php <php-statements> @endphp

Komponente mit Klammerstruktur

  • Wenn die Komponente Klammercharakter hat <x-my-component> <block> </x-my-component>, dann wird <block> mit der Variablen $slot referenziert:
  • Datei ok-panel.blade.php:
@prop(['buttonOk' => 'buttonOk', buttonCancel=''])
<div class="my-panel">
  {{ $slot }}
  <p><button name="{buttonOk}">
@if (! empty($buttonCancel)) 
  <button name="{buttonCancel}">@endif
  </p>
</div>

Aufruf der Komponente in einer Blade-Datei

  • Wenn die Komponentendefinitionsdatei my-component.blade.php heißt, wird sie mit <x-my-component> referenziert.
  • Wenn die Komponentendefinitionsdatei group/input/my-component.blade.php heißt, wird sie mit <x-group.input.my-component> referenziert.
  • Die Parameter werden in der Attributschreibweise von HTML übergeben (Parameatername ist Attributname): buttonOK="<name>"
<x-button name="btnOK" label="OK" width1="4" 'width2="3" />
<x-ok-panel buttonOk="btnOk">
  <p>Alles ist gut</p>
</x-ok-panel>

PHP-Variablen als Parameter

Man kann nicht nur Stringwerte als Parameaterwerte übergeben, sondern auch PHP-Parameter. In diesem Fall muss der Aufruf mit ':'<name> erfolgen:

  • Definition in username.blade.php:
@prop("user")
<p>Der Benutzer heißt {{ $user->name }}.</p>
  • Die Anwendung in index.blade.php:
<x-username :user="{{ $user }}" />