Ich lese die Laravel-Klinge Dokumentation und kann nicht herausfinden, wie Variablen in einer Vorlage zur späteren Verwendung zugewiesen werden. Ich kann es nicht tun, {{ $old_section = "whatever" }}
weil das "was auch immer" wiedergibt und ich das nicht will.
Ich verstehe, dass ich tun kann <?php $old_section = "whatever"; ?>
, aber das ist nicht elegant.
Gibt es eine bessere und elegantere Möglichkeit, dies in einer Blade-Vorlage zu tun?
php
laravel
laravel-4
laravel-blade
Dualität_
quelle
quelle
<?php $old_section = "whatever"; ?>
. Ich finde es gut lesbar.Antworten:
Es wird davon abgeraten, dies in einer Ansicht zu tun, sodass kein Blade-Tag dafür vorhanden ist. Wenn Sie dies in Ihrer Blade-Ansicht tun möchten, können Sie entweder einfach ein PHP-Tag öffnen, während Sie es geschrieben haben, oder ein neues Blade-Tag registrieren. Nur ein Beispiel:
quelle
{?
anstatt nur den nativen zu verwenden<?
?LARAVEL 5.5 UND AUF
Die @ php Blade-Direktive akzeptiert keine Inline-Tags mehr. Verwenden Sie stattdessen die vollständige Form der Richtlinie:
LARAVEL 5.2 UND AUF
Sie können einfach verwenden:
Oder Sie können es in einer Blockanweisung verwenden:
LARAVEL 5
Klinge wie folgt ausfahren:
Führen Sie dann einen der folgenden Schritte aus:
Schnelle Lösung: Wenn Sie faul sind, geben Sie den Code einfach in die boot () - Funktion der AppServiceProvider.php ein.
Schönere Lösung: Erstellen Sie einen eigenen Dienstanbieter. Unter https://stackoverflow.com/a/28641054/2169147 erfahren Sie, wie Sie das Blade in Laravel 5 erweitern. Auf diese Weise ist es etwas mehr Arbeit, aber eine gute Übung zur Verwendung von Providern :)
LARAVEL 4
Sie können den obigen Code einfach unten in app / start / global.php (oder an einem anderen Ort, wenn Sie der Meinung sind, dass dies besser ist) einfügen .
Nach den obigen Änderungen können Sie Folgendes verwenden:
eine Variable definieren.
quelle
@php(@i = 1)
oder in einer Blockanweisung verwenden (schließen mit@endphp
)Im Laravel-4können Sie die Vorlagenkommentarsyntax verwenden, um Variablen zu definieren / festzulegen.
Kommentarsyntax ist
{{-- anything here is comment --}}
und wird von gerendertKlinge Motor als<?php /* anything here is comment */ ?>
Mit wenig Trick können wir damit beispielsweise Variablen definieren
wird von gerendert Klingeals
<?php /* */$i=0;/* */ ?>
was die Variable für uns setzt. Ohne eine Codezeile zu ändern.quelle
<?php $i=0; ?>
Es gibt eine einfache Problemumgehung, bei der Sie keinen Code ändern müssen, und sie funktioniert auch in Laravel 4.
Sie verwenden einfach einen Zuweisungsoperator (
=
) in dem an eine@if
Anweisung übergebenen Ausdruck anstelle von (zum Beispiel) einem Operator wie z==
.Dann können Sie es überall dort verwenden, wo Sie eine andere Variable verwenden können
Der einzige Nachteil ist, dass Ihre Aufgabe für jemanden, der nicht weiß, dass Sie dies als Problemumgehung tun , wie ein Fehler aussieht .
quelle
Du wirst es zu kompliziert machen.
Verwenden Sie einfach nur PHP
donesies.
(oder https://github.com/alexdover/blade-set sieht auch ziemlich einfach aus)
Wir alle "hacken" das System, indem wir Variablen in Ansichten festlegen. Warum also den "Hack" komplizierter machen, als es sein muss?
Getestet in Laravel 4.
Ein weiterer Vorteil ist, dass die Syntaxhervorhebung ordnungsgemäß funktioniert (ich habe zuvor einen Kommentar-Hack verwendet und es war schrecklich zu lesen).
quelle
Sie können Variablen in der Blade Templating Engine auf folgende Arten festlegen:
1. Allgemeine
Variable für die Einstellung von PHP-Blöcken :
<?php $hello = "Hello World!"; ?>
Ausgabe:
{{$hello}}
2.
Variable für die Einstellung von Blade-PHP-Blöcken :
@php $hello = "Hello World!"; @endphp
Ausgabe:
{{$hello}}
quelle
Seit Laravel 5.2.23 haben Sie die @ php Blade-Direktive , die Sie inline oder als block-Anweisung verwenden können:
oder
quelle
Sie können eine Variable in der Ansichtsdatei festlegen, diese wird jedoch genauso gedruckt, wie Sie sie festgelegt haben. Auf jeden Fall gibt es eine Problemumgehung. Sie können die Variable in einem nicht verwendeten Abschnitt festlegen. Beispiel:
Dann
{{ $yourVar }}
wird gedruckt,Your value
wo immer Sie möchten, aber Sie erhalten die Ausgabe nicht, wenn Sie die Variable speichern.BEARBEITEN: Die Benennung des Abschnitts ist erforderlich, andernfalls wird eine Ausnahme ausgelöst.
quelle
In Laravel 4:
Wenn Sie möchten, dass die Variable in all Ihren Ansichten verfügbar ist, nicht nur in Ihrer Vorlage,
View::share
ist dies eine großartige Methode ( weitere Informationen in diesem Blog ).Fügen Sie einfach Folgendes in app / controller / BaseController.php hinzu
und jetzt
$myvar
steht es allen Ihren Ansichten zur Verfügung - einschließlich Ihrer Vorlage.Ich habe dies verwendet, um umgebungsspezifische Asset-URLs für meine Bilder festzulegen.
quelle
Und plötzlich wird nichts mehr erscheinen. Wenn Sie so etwas tun müssen, bereiten Sie meiner Erfahrung nach das HTML in der Methode eines Modells vor oder reorganisieren Sie Ihren Code in Arrays oder ähnliches.
Es gibt nie nur einen Weg.
quelle
$users = ...
, sondern etwas in der Art$css_class = ...
, also streng Designvariablen, die nicht zum Modell oder Controller gehören, wie sie vom Designer festgelegt werden.Ich werde die Antwort von @Pim erweitern.
Fügen Sie dies der Startmethode Ihres AppServiceProvider hinzu
Auf diese Weise können Sie keinen PHP-Ausdruck schreiben.
Sie können diese Direktive wie folgt verwenden:
quelle
Im Laravel-Dokument https://laravel.com/docs/5.8/blade#php können Sie Folgendes tun:
quelle
In Laravel 5.1, 5.2 :
https://laravel.com/docs/5.2/views#sharing-data-with-all-views
Datei bearbeiten:
/app/Providers/AppServiceProvider.php
quelle
Sie können das von mir veröffentlichte Paket verwenden: https://github.com/sineld/bladeset
Dann setzen Sie einfach Ihre Variable:
quelle
Mein eleganter Weg ist wie folgt
Und geben Sie einfach Ihre
$old_section
Variable wieder.quelle
Wenn Sie PHP 7.0 haben:
Der einfachste und effektivste Weg ist die Zuordnung in Klammern .
Die Regel ist einfach: Verwenden Sie Ihre Variable mehrmals? Erklären Sie es dann, wenn es zum ersten Mal in Klammern verwendet wird, bleiben Sie ruhig und machen Sie weiter.
Und ja, ich weiß davon
@forelse
, das ist nur eine Demo.Da Ihre Variablen jetzt als und deklariert werden, wenn sie verwendet werden, sind keine Blade-Problemumgehungen erforderlich.
quelle
Ich glaube nicht, dass Sie das können - aber andererseits sollte diese Art von Logik wahrscheinlich in Ihrem Controller behandelt und an die bereits festgelegte Ansicht übergeben werden.
quelle
$previous_group_name
,$separator_printed
Etc.app/controllers/BaseController.php
.Weisen Sie der Blade-Vorlage eine Variable zu. Hier sind die Lösungen
Wir können
<?php ?>
Tag in Blade-Seite verwendenODER
Wir können den Blade-Kommentar mit spezieller Syntax verwenden
quelle
Das Hacken von Kommentaren ist keine gut lesbare Methode. Auch Redakteure färben es als Kommentar und jemand kann es beim Durchsuchen des Codes vermissen.
Versuchen Sie so etwas:
Es wird kompiliert in:
... und die Aufgabe erledigen und nichts wiedergeben.
quelle
Es ist besser zu üben, Variablen in Controller zu definieren und dann mit
compact()
oder->with()
Methode an die Ansicht zu übergeben .Ansonsten gab #TLGreg die beste Antwort.
quelle
Es gibt eine sehr gute Erweiterung für Blade Radic / Blade-Extensions . Nachdem Sie es hinzugefügt haben, können Sie @set (Variablenname, Variablenwert) verwenden.
quelle
Ich suchte nach einer Möglichkeit, einem Schlüssel einen Wert zuzuweisen und ihn meiner Ansicht nach mehrmals zu verwenden. In diesem Fall können Sie den Wert
@section{"key", "value"}
zunächst verwenden und dann aufrufen,@yield{"key"}
um den Wert an anderen Stellen in Ihrer Ansicht oder in seinem untergeordneten Element auszugeben.quelle
Meiner Meinung nach ist es besser, die Logik in der Steuerung zu belassen und an die zu verwendende Ansicht zu übergeben. Dies kann auf zwei Arten mit der Methode 'View :: make' erfolgen. Ich verwende derzeit Laravel 3, bin mir aber ziemlich sicher, dass dies in Laravel 4 genauso ist.
oder
Die 'with'-Methode ist verkettbar. Sie würden dann die oben genannten wie folgt verwenden:
Weitere Informationen hier:
http://three.laravel.com/docs/views
http://codehappy.daylerees.com/using-controllers
quelle
$format='Y-m-d H:i:s';
Auf diese Weise können Sie dieses Format in der Ansicht wiederverwenden. Dies gehört sicherlich nicht in die Steuerung. Das heißt, als Antwort auf die Frage ... Es ist nichts falsch mit<?php ?>
Tags.Ich hatte eine ähnliche Frage und fand, was ich für die richtige Lösung halte View Composers
Mit View Composers können Sie bei jedem Aufruf einer bestimmten Ansicht Variablen festlegen. Dies können bestimmte Ansichten oder ganze Ansichtsvorlagen sein. Wie auch immer, ich weiß, dass es keine direkte Antwort auf die Frage ist (und 2 Jahre zu spät), aber es scheint eine elegantere Lösung zu sein, als Variablen in einer Ansicht mit Blade festzulegen.
quelle
Laravel 5 können Sie dies leicht tun. siehe unten
quelle
Sie können die Klinge mit der Verlängerungsmethode wie unten gezeigt verlängern.
Danach initialisieren Sie die Variablen wie folgt.
quelle
funktioniert in allen Versionen von Blade.
quelle