настройка переменных внутри цикла Laravel foreach

#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 —}}