Wie Festlegen von Variablen in einer Laravel-Blade-Vorlage
Bin ich beim Lesen des Laravel Klinge Dokumentation und ich kann nicht herausfinden, wie die Zuweisung von Variablen innerhalb einer Vorlage für den späteren Gebrauch. Ich kann das nicht {{ $old_section = "whatever" }}
denn das echo "was auch immer" und ich will nicht, dass.
Verstehe ich, dass ich tun kann <?php $old_section = "whatever"; ?>
, aber das ist nicht elegant.
Ist es besser, auf elegante Art und Weise zu tun, die in einem Blade-Vorlage?
- Überprüfen Sie das pull : github.com/laravel/laravel/pull/866
- Dies ist oft nützlich für die Prüfung, vor allem, wenn Sie arbeiten, auf die Vorlage doch noch jemand arbeitet auf der PHP-Teil. Nur vorsichtig sein, entfernen Sie die Erklärung, wenn Sie fertig sind, testen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es wird abgeraten, das zu tun in einer Ansicht, so gibt es keine Klinge, die tag für ihn.
Wenn Sie wollen, zu tun dies in Ihrer blade-Ansicht können Sie entweder öffnen Sie ein php-tag, wie Sie es schrieb, oder registrieren Sie ein neues blade-tag. Nur ein Beispiel:
{?
statt nur über die native<?
?@php
und@endphp
tags eingebaut Klinge. Mit dieser Antwort nicht verlassen, die Variablen, die in die blade-template in laravel 5.3+LARAVEL 5.5 UND BIS
Den @php-blade-Richtlinie nicht mehr akzeptiert inline-tags. Verwenden Sie stattdessen die vollständige form des in der Richtlinie:
LARAVEL 5.2 UND BIS
Können Sie einfach:
Oder Sie können verwenden Sie es in eine block-Anweisung:
LARAVEL 5
Erweitern Klinge wie diese:
Führen Sie dann einen der folgenden Schritte aus:
Schnelle Lösung: Wenn Sie faul sind, setzen Sie einfach den code in das boot () - Funktion der AppServiceProvider.php.
Schönere Lösung:
Erstellen Sie einen eigenen service-provider. Sehen https://stackoverflow.com/a/28641054/2169147 auf so verlängern Sie die Klinge in Laravel 5. Es ist ein bisschen mehr Arbeit, aber eine gute übung, wie mit Anbietern 🙂
LARAVEL 4
Können Sie einfach den obigen code auf der Unterseite der app/start/global.php (oder an jedem anderen Ort, wenn Sie das Gefühl, dass ist besser).
Nach den oben genannten Veränderungen, die Sie verwenden können:
eine variable definieren.
\
vor der Klinge::Erweiterung... erläuterte in dem angegebenen link, tho. Aber ich dachte, es ist es Wert zu erwähnen. Absolut elegante Lösung btw.+1
!@php(@i = 1)
oder verwenden Sie es in eine block-Anweisung (schließen mit@endphp
)In laravel-4, Sie können die Vorlage verwenden, Kommentar syntax zum definieren/festlegen von Variablen.
Kommentar-syntax ist
{{ -- anything here is comment -- }}
und es wird gerendert, indem Klinge - engine als<?php /* anything here is comment */?>
so mit einem kleinen trick können wir es verwenden, Variablen zu definieren, zum Beispiel
gerendert wird Klingeals
<?php /* */$i=0;/* */?>
setzt die variable für uns.Ohne Veränderung der code-Zeile.
<?php $i=0; ?>
Gibt es eine einfache Lösung, die nicht erforderlich ist, Sie zu ändern von code, und es funktioniert in Laravel 4 genauso gut.
Verwenden Sie einfach einen Zuweisungsoperator (
=
) in den Ausdruck an eine@if
- Anweisung anstelle von (zum Beispiel) ein operator wie==
.Dann können Sie es überall Sie können verwenden Sie eine andere variable
Der einzige Nachteil ist deine Aufgabe wird Aussehen wie ein Fehler, jemanden nicht bewusst, dass Sie tun dies als workaround.
Ya ' ll es zu kompliziert zu machen.
Nur benutzen Sie unformatierten php
donesies.
(oder https://github.com/alexdover/blade-set sieht ziemlich unkompliziert zu)
Sind wir alle ein bisschen "hacken" des Systems durch setzen von Variablen in Aussicht, also warum machen die "hack" komplizierter, dann muss man es?
Getestet in Laravel 4.
Ein weiterer Vorteil ist, dass das syntax-highlighting funktioniert einwandfrei (ich war mit Kommentar-hack vor und es war schrecklich zu Lesen)
Können Sie Die Variablen Festlegen, Die In Die Blade-Template-Engine Die Folgenden Möglichkeiten:
1. Allgemeine PHP-Block
Einstellung Variable:
<?php $hello = "Hello World!"; ?>
Ausgabe:
{{$hello}}
2. Klinge PHP-Block
Einstellung Variable:
@php $hello = "Hello World!"; @endphp
Ausgabe:
{{$hello}}
Seit Laravel 5.2.23, haben Sie die @php-Blade-Richtlinie, die Sie verwenden können inline oder als block-Anweisung:
oder
In Laravel 4:
Wenn Sie wollten, dass die variable kann in allen Ihren Ansichten, nicht nur Ihre Vorlage
View::share
ist eine großartige Methode, ( mehr Infos auf diesem blog ).Fügen Sie einfach die folgenden in app/controllers/BaseController.php
und jetzt
$myvar
verfügbar sein wird, um alle Ihre Ansichten -- einschließlich Ihrer Vorlage.Ich diese verwendet, um festzulegen Umgebung bestimmte asset-URLs für meine Bilder.
Können Sie eine variable in die Datei anzeigen, aber es wird gedruckt, so wie Sie es eingestellt. Sowieso, gibt es einen workaround. Sie können die variable in einem unbenutzten Abschnitt. Beispiel:
Dann
{{ $yourVar }}
druckenYour value
überall wo Sie es wollen zu, aber Sie nicht bekommen, die Ausgabe beim speichern der variable.EDIT: Namensgebung der Sektion ist erforderlich, sonst wird eine Ausnahme geworfen.
Und plötzlich erscheint nichts.
Aus meiner Erfahrung, wenn Sie haben, etwas zu tun wie dieser bereiten Sie den html-Code in ein Modell einer Methode oder einer Reorganisation des Codes in arrays oder so etwas.
Es ist nie nur 1 Weg.
$users = ...
, aber etwas entlang der Linien$css_class = ...
, so streng design-Variablen, die gehören nicht auf das Modell oder den controller, wie Sie sind bestimmt vom designer.Werde ich verlängern Sie die Antwort von @Pim.
Fügen Sie diese, um die boot-Methode des AppServiceProvider
Diese Weise Sie don ' T setzen Sie die Fähigkeit zu schreiben, php-Ausdruck.
Können Sie diese Direktive verwenden, wie:
In Laravel 5.1, 5.2:
https://laravel.com/docs/5.2/views#sharing-data-with-all-views
Datei Bearbeiten:
/app/Providers/AppServiceProvider.php
Benutzen, können Sie das Paket habe ich veröffentlicht: https://github.com/sineld/bladeset
Dann Sie ganz einfach Ihre variable:
Als für meine elegante Art und Weise ist, wie die folgenden
Und nur das echo Ihrer
$old_section
variable.Ich glaube nicht, dass Sie kann - aber dann wieder, diese Art von Logik sollte wahrscheinlich behandelt werden, in Ihrer Steuerung und ging in den anzeigen schon eingestellt.
$previous_group_name
,$separator_printed
usw.app/controllers/BaseController.php
.Wenn Sie PHP 7.0:
Der einfache und effektivste Weg ist, mit der Abtretung in den Klammern.
Die Regel ist einfach: verwenden Sie eine variable mehr als einmal? Dann erklären Sie es sich das erste mal in Klammern, halten Sie ruhig und carry on.
Und ja, ich weiß, über
@forelse
, dies ist nur eine demo.Da Ihre Variablen sind nun deklariert, wie und Wann Sie verwendet werden, gibt es keine Notwendigkeit für eine Klinge workarounds.
Variable, um die Klinge Vorlage, Hier sind die Lösungen
Wir können
<?php ?>
tag in blade SeiteODER
Können wir die Klinge Kommentar mit spezieller syntax
Hacking Kommentare ist nicht eine sehr gut lesbare Art und Weise, es zu tun. Auch Redakteure Farbe als Kommentar und jemand kann es vermissen, wenn man durch den code.
Probieren Sie etwas wie dieses:
Es wird die Kompilierung in:
...und machen die Zuordnung und kein echo, nichts.
Es ist besser, Praxis zu definieren, variabel in Controller-und dann gehen auf die Ansicht mit
compact()
oder->with()
Methode.Sonst #TLGreg besten gab Antwort.
Gibt es eine sehr gute Erweiterung für Blade radic/blade-extensions. Nachdem Sie es hinzufügen, können Sie mit @set(variable_name, variable_value)
laravel 5 Sie können dies ganz einfach . siehe unten
War ich auf der Suche nach einem Weg, um einen Wert zuweisen zu einer Taste und verwenden Sie es viele Male in meinem Blick. Für diesen Fall können Sie
@section{"key", "value"}
in den ersten Platz, und rufen Sie dann@yield{"key"}
für die Ausgabe von Werten in anderen Orten in Ihrer Sicht oder sein Kind.Meiner Meinung nach wäre es besser, um die Logik in den controller und an die view zu verwenden. Dies kann auf zwei Arten geschehen mit der 'View::machen Sie' - Methode. Ich bin derzeit mit Laravel 3 aber ich bin mir ziemlich sicher, dass es die gleiche Art und Weise, in Laravel 4.
oder
Der 'mit' - Methode ist verkettbare. Sie würden dann verwenden Sie das obige Beispiel so:
Mehr Informationen hier:
http://three.laravel.com/docs/views
http://codehappy.daylerees.com/using-controllers
$format='Y-m-d H:i:s';
so dass Sie wieder verwenden können, das format innerhalb der Ansicht. Diese sicherlich gehören nicht in den controller. Das heißt, in Antwort auf die Frage... Es ist nichts falsch mit<?php ?>
- tags.Hatte ich eine ähnliche Frage und fand, was ich denke, die richtige Lösung mit Anzeigen Komponisten
Anzeigen Komponisten erlauben Ihnen das einstellen von Variablen, die jedes mal eine bestimmte Ansicht wird aufgerufen, und Sie können spezifische sichten oder ganzer Vorlagen anzeigen. Wie auch immer, ich weiß, es ist nicht die direkte Antwort auf die Frage (und 2 Jahre zu spät), aber es wirkt wie eine eleganter Lösung als die Einstellung der Variablen in einem view mit Klinge.
funktioniert in allen Versionen von blade.
Verlängern Sie die Klinge, indem Sie mit Hilfe des extend-Methode, wie unten dargestellt..
danach initialisieren Sie Variablen wie folgt.