Laravel 查看显示:@foreach within @if
Laravel View display: @foreach within @if
我在我的 Laravel 视图中使用 materialisecss CSS 框架,并且我正在尝试设置我的布局:
- 如果只有一个post可用,则显示为6列宽,
偏移 3
- 如果只有2个post,它们都以6列宽并排显示
- 如果超过 2 个 post,它们将显示为 4 列宽。
我有下面的代码作为我观点的一部分,但它不喜欢它,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
我在我的 Laravel 视图中使用 materialisecss CSS 框架,并且我正在尝试设置我的布局:
- 如果只有一个post可用,则显示为6列宽, 偏移 3
- 如果只有2个post,它们都以6列宽并排显示
- 如果超过 2 个 post,它们将显示为 4 列宽。
我有下面的代码作为我观点的一部分,但它不喜欢它,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