352 Stimmen

Wie man Variablen in einem Laravel Blade Template einstellt

Ich lese gerade die Laravel Blade Dokumentation und ich kann nicht herausfinden, wie ich Variablen innerhalb einer Vorlage zur späteren Verwendung zuweisen kann. Ich kann nicht tun {{ $old_section = "whatever" }} denn das würde ein Echo von "wie auch immer" hervorrufen und das will ich nicht.

Ich verstehe, dass ich Folgendes tun kann <?php $old_section = "whatever"; ?> aber das ist nicht elegant.

Gibt es eine bessere, elegante Möglichkeit, dies in einer Blade-Vorlage zu tun?

506voto

Pim Punkte 5566

EINFACHER WEG

Wenn Sie mehrere Variablen definieren wollen, verwenden Sie die vollständige Form der blade-Richtlinie:

@php
   $i = 1;
   $j = 2;
@endphp

Wenn Sie nur eine Variable definieren wollen, können Sie auch eine einzige PHP-Anweisung verwenden:

@php($i = 1)

WEITER FORTGESCHRITTEN: EIN 'DEFINE'-TAG HINZUFÜGEN

Wenn Sie benutzerdefinierte Tags und ein @define anstelle von @php verwenden möchten, erweitern Sie Blade wie folgt:

/*
|--------------------------------------------------------------------------
| Extend blade so we can define a variable
| <code>
| @define $variable = "whatever"
| </code>
|--------------------------------------------------------------------------
*/

\Blade::extend(function($value) {
    return preg_replace('/\@define(.+)/', '<?php ${1}; ?>', $value);
});

Führen Sie dann einen der folgenden Schritte aus:

Schnelle Lösung : Wenn Sie zu faul sind, fügen Sie den Code einfach in die Funktion boot() der AppServiceProvider.php ein.

Schönere Lösung : Erstellen Sie einen eigenen Dienstanbieter. Siehe https://stackoverflow.com/a/28641054/2169147 darüber, wie man Blade in Laravel 5 erweitern kann. Es ist ein bisschen mehr Arbeit auf diese Weise, aber eine gute Übung, wie man Providers verwenden :)

Nach den obigen Änderungen können Sie diese verwenden:

@define $i = 1

um eine Variable zu definieren.

137voto

TLGreg Punkte 8221

Es wird davon abgeraten, dies in einer Ansicht zu tun, so dass es keine Klingenmarkierung dafür gibt. Wenn Sie dies in Ihrer Blade-Ansicht tun wollen, können Sie entweder nur ein php-Tag öffnen, wie Sie es geschrieben haben, oder ein neues Blade-Tag registrieren. Nur ein Beispiel:

<?php
/**
 * <code>
 * {? $old_section = "whatever" ?}
 * </code>
 */
Blade::extend(function($value) {
    return preg_replace('/\{\?(.+)\?\}/', '<?php ${1} ?>', $value);
});

119voto

Trying Tobemyself Punkte 3668

での laravel-4 können Sie die Syntax für Vorlagenkommentare verwenden, um Variablen zu definieren/zu setzen.

Die Syntax der Kommentare lautet {{-- anything here is comment --}} und sie wird wiedergegeben durch Klinge Motor als

<?php /* anything here is comment */ ?>

mit einem kleinen Trick können wir damit Variablen definieren, zum Beispiel

{{-- */$i=0;/* --}}

wird erbracht von Klinge a <?php /* */$i=0;/* */ ?> die die Variable für uns setzt. Ohne eine Zeile Code zu ändern.

62voto

BTMPL Punkte 1581

Es gibt einen einfachen Workaround, der keine Codeänderung erfordert und auch in Laravel 4 funktioniert.

Sie verwenden einfach einen Zuweisungsoperator ( = ) in dem Ausdruck, der an eine @if Anweisung, statt (zum Beispiel) eines Operators wie == .

@if ($variable = 'any data, be it string, variable or OOP') @endif

Dann können Sie sie überall dort verwenden, wo Sie auch jede andere Variable verwenden können

{{ $variable }}

Der einzige Nachteil ist, dass Ihr Auftrag siehe wie ein Fehler für jemanden, der nicht weiß, dass Sie dies als Umgehung tun.

41voto

Sabrina Leggett Punkte 8481

Ihr macht es zu kompliziert.

Verwenden Sie einfach nur php

<?php $i = 1; ?>
{{$i}}

Spenden.

(oder https://github.com/alexdover/blade-set sieht auch ziemlich einfach aus)

Wir alle "hacken" das System, indem wir Variablen in Ansichten setzen. Warum also den "Hack" komplizierter machen, als er sein muss?

Getestet in Laravel 4.

Ein weiterer Vorteil ist, dass die Syntaxhervorhebung richtig funktioniert (vorher benutzte ich comment hack und es war schrecklich zu lesen)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X