Czytam dokumentację Laravel Blade i nie mogę wymyślić, jak przypisać zmienne w szablonie do późniejszego wykorzystania. Nie mogę tego zrobić, {{ $old_section = "whatever" }}
ponieważ będzie to odzwierciedlać „cokolwiek” i nie chcę tego.
Rozumiem, że mogę <?php $old_section = "whatever"; ?>
, ale to nie jest eleganckie.
Czy jest lepszy, elegancki sposób na zrobienie tego w szablonie Blade?
php
laravel
laravel-4
laravel-blade
dwoistość_
źródło
źródło
<?php $old_section = "whatever"; ?>
. Uważam to za dość czytelne.Odpowiedzi:
Odradza się robić to w widoku, więc nie ma dla niego znacznika ostrza. Jeśli chcesz to zrobić w widoku bloku, możesz po prostu otworzyć tag php podczas pisania lub zarejestrować nowy tag bloku. Tylko przykład:
źródło
{?
zamiast używać natywnego<?
?LARAVEL 5.5 I nowsze
Dyrektywa @php blade nie akceptuje już tagów wbudowanych. Zamiast tego użyj pełnej formy dyrektywy:
LARAVEL 5.2 I nowsze
Możesz po prostu użyć:
Lub możesz użyć go w instrukcji blokowej:
LARAVEL 5
Przedłuż ostrze w ten sposób:
Następnie wykonaj jedną z następujących czynności:
Szybkie rozwiązanie: jeśli jesteś leniwy, po prostu wstaw kod w funkcji boot () AppServiceProvider.php.
Lepsze rozwiązanie: stwórz własnego usługodawcę. Zobacz https://stackoverflow.com/a/28641054/2169147, jak przedłużyć ostrze w Laravel 5. To trochę więcej pracy w ten sposób, ale dobre ćwiczenie, jak korzystać z Dostawców :)
LARAVEL 4
Możesz po prostu umieścić powyższy kod na dole app / start / global.php (lub w dowolnym innym miejscu, jeśli uważasz, że jest to lepsze).
Po powyższych zmianach możesz użyć:
zdefiniować zmienną.
źródło
@php(@i = 1)
lub użyć go w instrukcji blokowej (zamknij z@endphp
)W laravel-4, możesz użyć składni komentarza szablonu, aby zdefiniować / ustawić zmienne.
Składnia komentarza jest
{{-- anything here is comment --}}
i jest renderowana przeznóż silnik jak<?php /* anything here is comment */ ?>
więc przy pomocy małej sztuczki możemy na przykład użyć go do zdefiniowania zmiennych
będą renderowane przez nóża
<?php /* */$i=0;/* */ ?>
który ustawia zmienną dla nas. Bez zmiany jakiejkolwiek linii kodu.źródło
<?php $i=0; ?>
Istnieje proste obejście, które nie wymaga zmiany żadnego kodu, i działa również w Laravel 4.
Wystarczy użyć operatora przypisania (
=
) w wyrażeniu przekazanym do@if
instrukcji, zamiast (na przykład) operatora takiego jak==
.Następnie możesz użyć go w dowolnym miejscu i dowolnej innej zmiennej
Jedynym minusem jest to, że twoje zadanie będzie wyglądać jak błąd dla osoby nieświadomej, że robisz to jako obejście.
źródło
Sprawi to, że będzie to zbyt skomplikowane.
Po prostu użyj zwykłego php
Donesies.
(lub https://github.com/alexdover/blade-set też wygląda dość prosto)
Wszyscy trochę „hakujemy” system, ustawiając zmienne w widokach, więc po co komplikować „hack” bardziej, niż trzeba?
Testowane w Laravel 4.
Kolejną zaletą jest to, że podświetlanie składni działa poprawnie (wcześniej używałem hackowania komentarzy i przeczytanie go było okropne)
źródło
Możesz ustawić zmienne w silniku szablonów ostrzy następujące sposoby:
1. Ogólny blok PHP
zmienna ustawienia :
<?php $hello = "Hello World!"; ?>
Wyjście:
{{$hello}}
2.
Zmienna ustawienia bloku ostrza PHP :
@php $hello = "Hello World!"; @endphp
Wyjście:
{{$hello}}
źródło
Od wersji Laravel 5.2.23 masz dyrektywę @php Blade , której możesz używać inline lub jako instrukcji blokowej:
lub
źródło
Możesz ustawić zmienną w pliku widoku, ale zostanie ona wydrukowana tak jak ją ustawiłeś. W każdym razie istnieje obejście. Możesz ustawić zmienną w nieużywanej sekcji. Przykład:
Następnie
{{ $yourVar }}
wydrukujeYour value
gdziekolwiek chcesz, ale nie otrzymasz danych wyjściowych po zapisaniu zmiennej.EDYCJA: nazwa sekcji jest wymagana, w przeciwnym razie zostanie zgłoszony wyjątek.
źródło
W Laravel 4:
Jeśli chcesz, aby zmienna była dostępna we wszystkich twoich widokach, nie tylko w szablonie,
View::share
jest świetną metodą ( więcej informacji na tym blogu ).Wystarczy dodać następujące elementy w app / controllers / BaseController.php
i teraz
$myvar
będą dostępne dla wszystkich twoich widoków - w tym twojego szablonu.Użyłem tego, aby ustawić adresy URL zasobów specyficzne dla środowiska dla moich obrazów.
źródło
I nagle nic się nie pojawi. Z mojego doświadczenia wynika, że jeśli musisz zrobić coś takiego, przygotuj HTML w metodzie modelu lub przeorganizuj swój kod w tablice lub coś takiego.
Nigdy nie ma tylko jednego sposobu.
źródło
$users = ...
, ale coś wzdłuż linii$css_class = ...
, więc ściśle projektuj zmienne, które nie należą do modelu ani kontrolera, ponieważ są określone przez projektanta.W dokumencie laravel https://laravel.com/docs/5.8/blade#php Możesz to zrobić w następujący sposób:
źródło
Przedłużę odpowiedź udzieloną przez @Pim.
Dodaj to do metody rozruchu swojego AppServiceProvider
W ten sposób nie ujawniasz możliwości napisania żadnego wyrażenia php.
Możesz użyć tej dyrektywy jak:
źródło
W Laravel 5.1, 5.2 :
https://laravel.com/docs/5.2/views#sharing-data-with-all-views
Edytuj plik:
/app/Providers/AppServiceProvider.php
źródło
Możesz użyć pakietu, który opublikowałem: https://github.com/sineld/bladeset
Następnie łatwo ustawić zmienną:
źródło
Jeśli chodzi o mój elegancki sposób, wygląda to następująco
I po prostu powtórz swoją
$old_section
zmienną.źródło
Jeśli masz PHP 7.0:
Najprostszym i najbardziej skutecznym sposobem jest przypisanie w nawiasach .
Zasada jest prosta: czy używasz swojej zmiennej więcej niż raz? Następnie zadeklaruj to przy pierwszym użyciu w nawiasach, zachowaj spokój i kontynuuj.
I tak, wiem o
@forelse
tym, to tylko wersja demonstracyjna.Ponieważ twoje zmienne są teraz zadeklarowane jako i kiedy są używane, nie ma potrzeby żadnych obejść ostrza.
źródło
Nie sądzę, żebyś mógł - ale z drugiej strony tego rodzaju logika powinna być prawdopodobnie obsługiwana w twoim kontrolerze i przekazywana do już ustawionego widoku.
źródło
$previous_group_name
,$separator_printed
itp.app/controllers/BaseController.php
.Przypisz zmienną do szablonu bloku, oto rozwiązania
Możemy użyć
<?php ?>
tagu na stronie blokuLUB
Możemy użyć komentarza ostrza ze specjalną składnią
źródło
Hakowanie komentarzy nie jest zbyt czytelnym sposobem na zrobienie tego. Również redaktorzy pokolorują go jako komentarz i ktoś może go pominąć, przeglądając kod.
Wypróbuj coś takiego:
Skompiluje się w:
... i wykonuj zadanie i niczego nie odbijaj.
źródło
Lepiej poćwiczyć definiowanie zmiennej w sterowniku, a następnie przejść do widoku za pomocą
compact()
lub->with()
metody.W przeciwnym razie #TLGreg udzielił najlepszej odpowiedzi.
źródło
Istnieje bardzo dobre rozszerzenie dla radic / rozszerzeń Blade . Po dodaniu możesz użyć @set (nazwa_zmiennej, wartość_zmiennej)
źródło
Szukałem sposobu, aby przypisać wartość do klucza i użyć go wiele razy według mnie. W tym przypadku możesz użyć
@section{"key", "value"}
w pierwszej kolejności, a następnie wywołać,@yield{"key"}
aby wyświetlać wartość w innych miejscach w widoku lub jego potomku.źródło
Moim zdaniem lepiej byłoby zachować logikę w kontrolerze i przekazać ją do użycia. Można to zrobić na dwa sposoby za pomocą metody „View :: make”. Obecnie używam Laravel 3, ale jestem prawie pewien, że jest tak samo w Laravel 4.
lub
Metoda „z” jest łańcuchowa. Następnie użyjesz powyższego w następujący sposób:
Więcej informacji tutaj:
http://three.laravel.com/docs/views
http://codehappy.daylerees.com/using-controllers
źródło
$format='Y-m-d H:i:s';
w ten sposób możesz ponownie użyć tego formatu w widoku. To z pewnością nie należy do kontrolera. To powiedziawszy, w odpowiedzi na pytanie ... Nie ma nic złego w<?php ?>
tagach.Miałem podobne pytanie i znalazłem właściwe rozwiązanie w View Composers
Kompozytorzy widoków umożliwiają ustawienie zmiennych za każdym razem, gdy wywoływany jest określony widok, i mogą to być określone widoki lub całe szablony widoków. W każdym razie wiem, że nie jest to bezpośrednia odpowiedź na pytanie (i 2 lata za późno), ale wydaje się, że jest to bardziej wdzięczne rozwiązanie niż ustawianie zmiennych w widoku za pomocą ostrza.
źródło
laravel 5 możesz łatwo to zrobić. patrz poniżej
źródło
Możesz przedłużyć ostrze za pomocą metody przedłużenia, jak pokazano poniżej.
po tym zainicjuj zmienne w następujący sposób.
źródło
działa we wszystkich wersjach ostrza.
źródło