如何解决刀片语句中的额外空格 Laravel 8
问题是,它不仅仅是一个变量,而是带有 @if
、@isset
和 @foreach
指令的语句。如果没有语法错误,我无法删除空格。所有这些空格都显示在输入字段中。
在描述字段中,我这样做了:
-
检查,如果
old('description')
存在。 -
如果是,显示它。
-
如果不存在,则检查变量
$post
是否存在(我将此表单用于存储和更新方法)。 -
如果是,显示它。
-
如果不是,则该字段保持为空。
<div class="form-group"> <label for="description">Description</label> <textarea id="description" name="description" rows="3">@if(old('description')){{ old('description') }}@else @isset ($post){{$post->description}}@endisset @endif</textarea>
<div class="form-group"> <label for="tags">Tags</label> <input type="text" name="tags" id="tags" value="@isset ($post,$tags)@foreach($post->tagged as $tagged){{$tagged->tag_name}},@endforeach @endisset">
我尝试了 hedronium/spaceless-blade 包,但它不适用于输入值。
解决方法
>@if
和 "@isset
将被解析为字符串,因为 @
只有在不与除空格、换行或制表符之外的其他字符连接在一起时才会被解析为语法。您可以在 {{}}
内不带 @ 的条件下执行。
我有一个使用 ternary operator and null coalescing operator 的更好的解决方案。
更改您的长代码
@if(old('description')){{ old('description') }}@else @isset ($post){{$post->description}}@endisset @endif
到
{{old('description') ?? isset($post)?$post->description:''}}
和改变
@isset ($post,$tags)@foreach($post->tagged as $tagged){{$tagged->tag_name}},@endforeach @endisset
到
{{isset($post) ? implode(',',$post->tagged->pluck('tag_name')->toArray() )):''}}
完整代码:
<div class="form-group">
<label for="description">Description</label>
<textarea id="description" name="description" rows="3">{{old('description') ?? isset($post)?$post->description:''}}</textarea>
</div>
<div class="form-group">
<label for="tags">Tags</label>
<input type="text" name="tags" id="tags"
value="{{isset($post) ? implode(',$post->tagged->pluck('tag_name')->toArray() )):''}}">
</div>
,
我使用指令 @php
解决了我的问题。
<textarea id="description" name="description" rows="3">@php
if(old('description')) {
echo old('description');
} elseif (isset($post)){
echo $post->description;
}
@endphp</textarea>
不再有多余的空格。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。