Jak mogę używać przełącznika w szablonach ostrzy? Kiedy użyłem:
@switch($login_error)
@case(1)
`E-mail` input is empty!
@break
@case(2)
`Password` input is empty!
@break
@endswitch
w rezultacie widzę ten tekst jako zwykły tekst. Wolę używać przełącznika w kilku fragmentach kodu, ponieważ jest dla mnie bardziej przejrzysty niż gdy używam if.
Ale jeśli nie jest to możliwe, po prostu to napisz.
Odpowiedzi:
Zaktualizowana odpowiedź z 2020 r
Od Laravel 5.5 przełącznik @switch jest wbudowany w Blade. Użyj go, jak pokazano poniżej.
@switch($login_error) @case(1) <span> `E-mail` input is empty!</span> @break @case(2) <span>`Password` input is empty!</span> @break @default <span>Something went wrong, please try again</span> @endswitch
Starsza odpowiedź
Niestety Laravel Blade nie ma instrukcji przełączania. Możesz użyć Laravel, jeśli inaczej, lub użyć zwykłego przełącznika PHP. Możesz używać zwykłego PHP w szablonach blade, tak jak w każdej innej aplikacji PHP. Począwszy od Laravel 5.2 i nowszych użyj instrukcji @php.
Opcja 1:
@if ($login_error == 1) `E-mail` input is empty! @elseif ($login_error == 2) `Password` input is empty! @endif
źródło
Możesz po prostu dodać ten kod w metodzie rozruchu klasy AppServiceProvider.
Blade::extend(function($value, $compiler){ $value = preg_replace('/(\s*)@switch\((.*)\)(?=\s)/', '$1<?php switch($2):', $value); $value = preg_replace('/(\s*)@endswitch(?=\s)/', '$1endswitch; ?>', $value); $value = preg_replace('/(\s*)@case\((.*)\)(?=\s)/', '$1case $2: ?>', $value); $value = preg_replace('/(?<=\s)@default(?=\s)/', 'default: ?>', $value); $value = preg_replace('/(?<=\s)@breakswitch(?=\s)/', '<?php break;', $value); return $value; });
wtedy możesz użyć jako:
@switch( $item ) @case( condition_1 ) // do something @breakswitch @case( condition_2 ) // do something else @breakswitch @default // do default behaviour @breakswitch @endswitch
Ciesz się tym ~
źródło
parse error, expecting
& bdquo; przełącznik krańcowy (T_ENDSWITCH) & rdquo; & # 039; lub"case (T_CASE)"' or
"default (T_DEFAULT)"W LARAVEL 5.2 i nowszych:
Napisz swój zwykły kod między otwierającymi i zamykającymi instrukcjami PHP.
@php switch (x) { case 1: //code to be executed break; default: //code to be executed } @endphp
źródło
@php
składnia jest bardzo przydatna w L5.2>Jest to teraz wbudowane w Laravel 5.5 https://laravel.com/docs/5.5/blade#switch-statements
źródło
W Laravel 5.1 działa to w Blade:
<?php switch( $machine->disposal ) { case 'DISPO': echo 'Send to Property Disposition'; break; case 'UNIT': echo 'Send to Unit'; break; case 'CASCADE': echo 'Cascade the machine'; break; case 'TBD': echo 'To Be Determined (TBD)'; break; } ?>
źródło
Możesz przedłużyć ostrze w następujący sposób:
Blade::directive('switch', function ($expression) { return "<?php switch($expression): ?>"; }); Blade::directive('case', function ($expression) { return "<?php case $expression: ?>"; }); Blade::directive('break', function () { return "<?php break; ?>"; }); Blade::directive('default', function () { return "<?php default: ?>"; }); Blade::directive('endswitch', function () { return "<?php endswitch; ?>"; });
Następnie możesz użyć następujących:
@switch($test) @case(1) Words @break @case(2) Other Words @break @default Default words @endswitch
Jednak zwróć uwagę na ostrzeżenia w: http://php.net/manual/en/control-structures.alternative-syntax.php
Jeśli między przełącznikiem (): a pierwszym przypadkiem znajduje się spacja, cały blok kodu zawiedzie. Jest to raczej ograniczenie PHP niż ograniczenie ostrza. Możesz to ominąć, wymuszając normalną składnię, np .:
Blade::directive('switch', function ($expression) { return "<?php switch($expression) { ?>"; }); Blade::directive('endswitch', function ($) { return "<?php } ?>"; });
Ale to trochę źle.
źródło
Aby wyeliminować spację w 'switch ()', możesz użyć kodu:
Blade::extend(function($value, $compiler){ $value = preg_replace('/(\s*)@switch[ ]*\((.*)\)(?=\s)/', '$1<?php switch($2):', $value); $value = preg_replace('/(\s*)@endswitch(?=\s)/', '$1endswitch; ?>', $value); $value = preg_replace('/(\s*)@case[ ]*\((.*)\)(?=\s)/', '$1case $2: ?>', $value); $value = preg_replace('/(?<=\s)@default(?=\s)/', 'default: ?>', $value); $value = preg_replace('/(?<=\s)@breakswitch(?=\s)/', '<?php break;', $value); return $value; });
źródło
Kiedy zaczynasz używać instrukcji switch w swoich widokach, zwykle oznacza to, że możesz dalej ponownie uwzględniać swój kod. Logika biznesowa nie jest przeznaczona dla widoków, sugerowałbym raczej wykonanie instrukcji switch w kontrolerze, a następnie przekazanie wyniku instrukcji switch do widoku.
źródło