Laravel 查看显示:@foreach within @if

Laravel View display: @foreach within @if

我在我的 Laravel 视图中使用 materialisecss CSS 框架,并且我正在尝试设置我的布局:

我有下面的代码作为我观点的一部分,但它不喜欢它,returns 如下:

Parse error: syntax error, unexpected 'elseif' (T_ELSEIF) (View: /home/testuser/sites/lsapp/resources/views/posts/index.blade.php)

    @if(count($posts) > 0)

    <div class="row">

        @if (count($posts) === 1)

            @foreach($posts as $post)
            <div class="col s12 m6 offset-m3">

        @elseif (count($posts) === 2)

            @foreach($posts as $post)
            <div class="col s12 m6">

        @else
            @foreach($posts as $post)
            <div class="col s12 m4">

        @endif

            <a href="posts/{{$post->id}}">
                <div class="card hoverable">
                    <div class="card-image">
                        <img src="http://via.placeholder.com/460x230">
                        <span class="card-title">{{$post->title}}</span>
                        <a class="btn-floating halfway-fab waves-effect waves-light red hover"><i class="material-icons">remove_red_eye</i></a>
                    </div>
                    <div class="card-content">
                        <p>
                            Created by {{$post->user->name}}<br>
                            <small>on {{$post->created_at->toDateString()}} at {{$post->created_at->toTimeString()}}</small>
                        </p>
                    </div>
                </div>
            </a>
        </div>

        @endforeach

    </div>

    @else
        <div class="row">
            <div class="col s12">
                <div class="card">
                    <p>No posts found</p>
                </div>
            </div>
        </div>
    @endif

我觉得跟foreach有关系,但不确定。

注意:可能有更好的方法,但我目前正在自学 PHP 后学习 Laravel,所以这不是世界末日。

你需要@endforeach

@foreach($posts as $post)
....
@endforeach

错误是说有一个意外的 @elseif 因为解析器希望你在之前结束 foreach。

你可以试试这个:

   @if (count($posts) === 1)
       <?php $class = 'col s12 m6 offset-m3'; ?>
    @elseif (count($posts) === 2)
       <?php $class = 'col s12 m6'; ?>
    @else
        <?php $class = 'col s12 m4'; ?>
    @endif

    @foreach($posts as $post)
        <div class="{{ $class }}">
       //rest of code...

    @endforeach

是的,每个指令都必须正确关闭。这意味着你应该在每个 @foreach 语句之后有结束标记 @endforeach

您遇到问题是因为您没有正确关闭指令。尝试这样的事情。

@if(count($posts) > 0)
    <div class="row">
        @foreach($posts as $post)
            <div class="@if (count($posts) === 1) col s12 m6 offset-m3 @elseif (count($posts) === 2) col s12 m6 @else col s12 m4 @endif">


                <a href="posts/{{$post->id}}">
                    <div class="card hoverable">
                        <div class="card-image">
                            <img src="http://via.placeholder.com/460x230">
                            <span class="card-title">{{$post->title}}</span>
                            <a class="btn-floating halfway-fab waves-effect waves-light red hover"><i
                                        class="material-icons">remove_red_eye</i></a>
                        </div>
                        <div class="card-content">
                            <p>
                                Created by {{$post->user->name}}<br>
                                <small>on {{$post->created_at->toDateString()}}
                                    at {{$post->created_at->toTimeString()}}</small>
                            </p>
                        </div>
                    </div>
                </a>
            </div>
        @endforeach
    </div>
@else
    <div class="row">
        <div class="col s12">
            <div class="card">
                <p>No posts found</p>
            </div>
        </div>
    </div>
@endif

如果很难。你可以试试

@php @endphp