#php #laravel #laravel-blade
Вопрос:
Я только начал использовать фреймворк. В обычном PHP после открытия foreach
я бы затем установил переменные, а затем закрыл тег php, но затем, исходя из того, что я могу понять, вы должны затем выполнить @foreach
теги Laravel, а затем открыть и закрыть @php
. Есть ли способ обойти это, поскольку это кажется большой дополнительной работой и кодом?
@foreach($steps as $row)
@php
$title = $row->title;
$text = $row->text;
$i = 1;
@endphp
<div class="steps-item grid-wrap">
<div class="number"
@if($text || $title)
<div class="text-wrap">
@if($title)
<h2>{{$title}}</h2>
@endif
{!! $text !!}
</div>
@php
$i ;
@endphp
@endif
</div>{{--END steps-item--}}
@endforeach
Комментарии:
1. Не может/не должно ли это быть сделано в контроллере или модели?
Ответ №1:
Поскольку blade не является PHP, вы должны вернуться к PHP с этой директивой. Но вы можете установить/использовать переменные, не делая этого в вашем случае:
@foreach($steps as $i => $row)
<div class="steps-item grid-wrap">
<div class="number"
@if($text || $title)
<div class="text-wrap">
@if($title)
<h2>{{ $row->title }}</h2>
@endif
{!! $row->text !!}
</div>
@php
$i ;
@endphp
@endif
</div>{{--END steps-item--}}
@endforeach
Если вы все еще хотите задавать переменные, есть пакет Laravel, который называется alexdover/blade-set
. Но, как отметил @brombeer, в большинстве случаев настоятельно рекомендуется установить все необходимые переменные в контроллере, прежде чем передавать их в представление.
Ответ №2:
Используйте переменные цикла, предоставленные laravel:
$loop->iteration The current loop iteration (starts at 1).
Он будет увеличиваться на каждой итерации цикла автоматически.
e.g:
First iteration = $loop->iteration => 1 ;
Second iteration = $loop->iteration => 2 ;
so on until loop ends.
Проверьте документы:
Переменные Цикла
Ответ №3:
Вы можете использовать директиву @for с размером($шагов) , как это:
@for($i=0; $i<= sizeof($steps)-1; $i )
@endfor
Ответ №4:
@foreach ($шаги как $строка)
<div class="steps-item grid-wrap">
<div class="number">
<div class="text-wrap">
@if ($row->title != '')
<h2>{{$row->title}}</h2>
/* if you want to display another title when its blank you can
use if-else here otherwise not need to use if conditions for
title and text */
@endif
@if ($row->text != '')
{!! $row->text !!}
@endif
</div>
</div>
</div>
@endforeach
{{— для примера у вас есть значения $steps, такие как
$шаги = Массив( [0] -> 1, [1] ->> ‘название’, [2] ->>> ‘текст» );
если вам нужна эта пара значений ключа массива, вы должны использовать @foreach как @foreach ($шаги как $ключ=>$значение) @endforeach
вы можете использовать значение ключа только в цикле @foreach —}}