Jak ustawić zmienne w szablonie Laravel Blade
Czytam dokumentację Laravel blade i nie mogę rozgryźć, Jak przypisać zmienne w szablonie do wykorzystania później. Nie mogę zrobić {{ $old_section = "whatever" }}
, bo to będzie echo "cokolwiek" i nie chcę tego.
Czy jest lepszy, elegancki sposób, aby to zrobić w szablonie Blade?
29 answers
Odradza się robienie tego w widoku, więc nie ma dla niego znacznika ostrza. Jeśli chcesz to zrobić w widoku blade, możesz po prostu otworzyć znacznik php tak, jak go napisałeś lub zarejestrować nowy znacznik blade. Tylko przykład:
<?php
/**
* <code>
* {? $old_section = "whatever" ?}
* </code>
*/
Blade::extend(function($value) {
return preg_replace('/\{\?(.+)\?\}/', '<?php ${1} ?>', $value);
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-22 20:32:18
LARAVEL 5.5 I WIĘCEJ
Dyrektywa @php blade nie akceptuje już znaczników inline. Zamiast tego użyj pełnej formy dyrektywy:
@php
$i = 1
@endphp
LARAVEL 5.2 I WIĘCEJ
Możesz po prostu użyć:
@php ($i = 1)
Lub można go użyć w instrukcji blokowej:
@php
$i = 1
@endphp
LARAVEL 5
Rozciągnij ostrze tak:
/*
|--------------------------------------------------------------------------
| Extend blade so we can define a variable
| <code>
| @define $variable = "whatever"
| </code>
|--------------------------------------------------------------------------
*/
\Blade::extend(function($value) {
return preg_replace('/\@define(.+)/', '<?php ${1}; ?>', $value);
});
Następnie wykonaj jedną z następujących czynności:
Szybkie rozwiązanie: jeśli jesteś leniwy, po prostu umieść kod w funkcji boot () AppServiceProvider.php.
Ładniejsze rozwiązanie: Stwórz własnego dostawcę usług. 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żna użycie:
@define $i = 1
Aby zdefiniować zmienną.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-19 09:49:07
W laravel-4 możesz użyć składni komentarza szablonu do definiowania/ustawiania zmiennych.
Składnia komentarza jest {{-- anything here is comment --}}
i jest renderowana przezblade jako
<?php /* anything here is comment */ ?>
Więc za pomocą małej sztuczki możemy użyć go do zdefiniowania zmiennych, na przykład
{{-- */$i=0;/* --}}
Zostanie renderowany przez blade jako
<?php /* */$i=0;/* */ ?>
który ustawia zmienną dla nas.
Bez zmiany linii kodu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-27 11:56:00
Istnieje proste obejście, które nie wymaga zmiany żadnego kodu i działa również w Laravel 4.
Po prostu używasz operatora przypisania (=
) w wyrażeniu przekazanym do instrukcji @if
, zamiast (na przykład) operatora, takiego jak ==
.
@if ($variable = 'any data, be it string, variable or OOP') @endif
Wtedy możesz użyć go wszędzie tam, gdzie możesz użyć dowolnej innej zmiennej
{{ $variable }}
Jedynym minusem jest to, że Twoje zadanie będzie wyglądać Jak błąd dla kogoś, kto nie wie, że robisz to jako obejście.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-21 15:55:30
To zbyt skomplikowane.
Po prostu użyj zwykłego php
<?php $i = 1; ?>
{{$i}}
Donesies.
(lub https://github.com/alexdover/blade-set wygląda też całkiem prosto)
Wszyscy "hakujemy" system ustawiając zmienne w widokach, więc po co utrudniać "hakowanie"?
Testowany w Laravel 4.Kolejną zaletą jest to, że podświetlanie składni działa poprawnie (wcześniej używałem comment hack i było okropnie read)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-21 14:18:38
Zmienne W Silniku Szablonów Blade Można Ustawić W Następujący Sposób:
1. Ogólny blok PHP
Ustawianie zmiennej: <?php $hello = "Hello World!"; ?>
wyjście: {{$hello}}
2. Blade PHP Block
Ustawianie zmiennej: @php $hello = "Hello World!"; @endphp
wyjście: {{$hello}}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-13 05:59:23
Od wersji Laravel 5.2.23, masz dyrektywę @php Blade , której możesz użyć w wierszu lub jako instrukcji blokowej:
@php($old_section = "whatever")
Lub
@php
$old_section = "whatever"
@endphp
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-11 19:34:05
Możesz ustawić zmienną w pliku widoku, ale zostanie ona wydrukowana tak, jak ją ustawisz. W każdym razie, jest obejście. Zmienną można ustawić wewnątrz nieużywanej sekcji. Przykład:
@section('someSection')
{{ $yourVar = 'Your value' }}
@endsection
Następnie {{ $yourVar }}
wydrukuje Your value
w dowolnym miejscu, ale nie otrzymasz wyniku podczas zapisywania zmiennej.
EDIT: nazwanie sekcji jest wymagane w przeciwnym razie zostanie wyrzucony wyjątek.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-13 11:24:33
W Laravel 4:
Jeśli chcesz, aby zmienna była dostępna we wszystkich widokach, a 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
class BaseController extends Controller
{
public function __construct()
{
// Share a var with all views
View::share('myvar', 'some value');
}
}
I teraz {[2] } będą dostępne dla wszystkich Twoich widoków-łącznie z Twoim szablonem.
Użyłem tego do ustawienia adresów URL zasobów specyficznych dla środowiska dla moich obrazów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-20 14:18:13
W dokumencie laravel https://laravel.com/docs/5.8/blade#php Można to zrobić w ten sposób:
@php
$my_variable = 123;
@endphp
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-03-07 11:45:28
I nagle nic się nie pojawi. Z mojego doświadczenia, jeśli musisz zrobić coś takiego, przygotuj html w metodzie modelu lub zrób jakąś reorganizację kodu w tablicach lub coś takiego.
Nigdy nie ma tylko jednej drogi.{{ $x = 1 ? '' : '' }}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-27 15:53:49
Zamierzam rozszerzyć odpowiedź udzieloną przez @Pim.
Dodaj to do metody rozruchowej AppServiceProvider
<?php
/*
|--------------------------------------------------------------------------
| Extend blade so we can define a variable
| <code>
| @set(name, value)
| </code>
|--------------------------------------------------------------------------
*/
Blade::directive('set', function($expression) {
list($name, $val) = explode(',', $expression);
return "<?php {$name} = {$val}; ?>";
});
W ten sposób nie ujawniasz możliwości zapisu dowolnego wyrażenia php.
Możesz użyć tej dyrektywy w następujący sposób:
@set($var, 10)
@set($var2, 'some string')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-02 11:25:35
W Laravel 5.1, 5.2:
Https://laravel.com/docs/5.2/views#sharing-data-with-all-views
Może być konieczne udostępnienie fragmentu danych wszystkim widokom , które są renderowane przez Twoją aplikację. Można to zrobić za pomocą metody udostępniania widoku factory. Zazwyczaj należy umieszczać połączenia do udostępniania w ramach metody rozruchu dostawcy usług. Możesz dodać je do AppServiceProvider lub wygenerować oddzielnego dostawcę usług do domu oni.
Edycja pliku: /app/Providers/AppServiceProvider.php
<?php
namespace App\Providers;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
view()->share('key', 'value');
}
public function register()
{
// ...
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-21 21:09:29
Możesz użyć pakietu, który opublikowałem: https://github.com/sineld/bladeset
Następnie łatwo ustawić zmienną:
@set('myVariable', $existing_variable)
// or
@set("myVariable", "Hello, World!")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-11 12:29:10
Jeśli chodzi o mój elegancki sposób jest jak poniżej
{{ ''; $old_section = "whatever"; }}
I po prostu echo swojej $old_section
zmiennej.
{{ $old_section }}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-17 04:30:43
Jeśli masz PHP 7.0:
Najprostszym i najskuteczniejszym sposobem jest przypisanie wewnątrz nawiasów.
Zasada jest prosta: Czy używasz zmiennej więcej niż raz? Następnie zadeklaruj, że jest używany po raz pierwszy w nawiasach, Zachowaj spokój i kontynuuj.
@if(($users = User::all())->count())
@foreach($users as $user)
{{ $user->name }}
@endforeach
@else
There are no users.
@endif
I tak, Wiem o @forelse
, to tylko demo.
Ponieważ twoje zmienne są teraz deklarowane jako i kiedy są używane, nie ma potrzeby stosowania obejść.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-26 17:25:05
Przypisz zmienną do szablonu blade, oto rozwiązania
Możemy użyć znacznika <?php ?>
na stronie blade
<?php $var = 'test'; ?>
{{ $var }
Lub
Możemy użyć komentarza blade ze specjalną składnią
{{--*/ $var = 'test' /*--}}
{{ $var }}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-24 12:56:13
Ja również zmagałem się z tym samym problemem. Ale udało mi się poradzić sobie z tym problemem za pomocą następującego segmentu kodu. Użyj tego w szablonie ostrza.
<input type="hidden" value="{{$old_section = "whatever" }}">
{{$old_section }}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-09-27 10:16:50
Myślę, że nie możesz - ale z drugiej strony, tego rodzaju logika powinna być obsługiwana w kontrolerze i przekazywana do widoku już ustawionego.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-21 22:18:32
Hakowanie komentarzy nie jest zbyt czytelnym sposobem na to. Również redaktorzy pokolorują go jako komentarz i ktoś może go przegapić, przeglądając kod.
Spróbuj czegoś takiego:
{{ ''; $hello = 'world' }}
Skompiluje się do:
<?php echo ''; $hello = 'world'; ?>
...i wykonaj zadanie i niczego nie echo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-11 06:46:07
Lepiej poćwiczyć zdefiniowanie zmiennej w kontrolerze, a następnie przejść do widoku za pomocą metody compact()
LUB ->with()
.
Inaczej #TLGreg dał najlepszą odpowiedź.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-05 12:02:21
Istnieje bardzo dobre rozszerzenie dla Blade radic / blade-extensions . Po dodaniu możesz użyć @set (variable_name, variable_value)
@set(var, 33)
{{$var}}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-09 13:04:15
Szukałem sposobu, aby przypisać wartość do klucza i użyć go wiele razy, moim zdaniem. W tym przypadku możesz najpierw użyć @section{"key", "value"}
, a następnie wywołać @yield{"key"}
, Aby wyświetlić wartość w innych miejscach w widoku lub jego potomku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-22 22:15:59
Moim zdaniem lepiej byłoby zachować logikę w kontrolerze i przekazać ją do widoku do użycia. Można to zrobić na dwa sposoby używając metody 'View:: make'. Obecnie używam Laravel 3, ale jestem prawie pewien, że tak samo jest w Laravel 4.
public function action_hello($userName)
{
return View::make('hello')->with('name', $userName);
}
Lub
public function action_hello($first, $last)
{
$data = array(
'forename' => $first,
'surname' => $last
);
return View::make('hello', $data);
}
Metoda 'with' jest łańcuchowa. Następnie użyłbyś powyższego w ten sposób:
<p>Hello {{$name}}</p>
Więcej informacji tutaj:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-22 18:07:16
Miałem podobne pytanie i znalazłem poprawne rozwiązanie View Composers
Komponenty widoków umożliwiają ustawianie zmiennych za każdym razem, gdy dany widok jest wywoływany, i mogą to być konkretne 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ę to bardziej wdzięcznym rozwiązaniem niż ustawianie zmiennych w widoku za pomocą blade.View::composer(array('AdminViewPath', 'LoginView/subview'), function($view) {
$view->with(array('bodyClass' => 'admin'));
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-18 07:12:50
Laravel 5 możesz to łatwo zrobić . patrz poniżej
{{--*/ @$variable_name = 'value' /*--}}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-12 09:19:12
Można rozszerzyć blade za pomocą metody extend, jak pokazano poniżej..
Blade::extend(function($value) {
return preg_replace('/\@var(.+)/', '<?php ${1}; ?>', $value);
});
Następnie inicjalizuj zmienne w następujący sposób.
@var $var = "var"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-19 16:59:26
Wewnątrz pliku blade możesz użyć tego formatu
@php
$i++
@endphp
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-09-14 10:18:44
Działa we wszystkich wersjach blade.
{{--*/ $optionsArray = ['A', 'B', 'C', 'D','E','F','G','H','J','K'] /*--}}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-06 07:05:31