【问题标题】:Extra whitespaces in blade statements. Laravel 8刀片语句中的额外空格。拉拉维尔 8
【发布时间】:2021-05-04 19:11:53
【问题描述】:

问题是,它不仅仅是一个变量,而是带有@if@isset@foreach 指令的语句。如果没有语法错误,我无法删除空格。所有这些空格都显示在输入字段中。

在描述字段中我这样做了:

  1. 检查old('description') 是否存在。

  2. 如果是,显示它。

  3. 如果不存在,则检查变量$post 是否存在(我将此表单用于存储和更新方法)。

  4. 如果是,显示它。

  5. 如果不是,该字段保持为空。

     <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,但它不适用于输入值。

【问题讨论】:

  • ErrorException Unparenthesized a ? b : c ? d : e 已弃用。使用(a ? b : c) ? d : ea ? b : (c ? d : e)
  • 再试一次isset(old('description')) ? old('description') : isset($post) ? $post-&gt;description : NULL;
  • "isset 仅适用于变量和数组"。我将isset(old('description')) 更改为old('description') 并得到与上述相同的错误。
  • old('description', $post-&gt;description ?? null) old('description', optional($post)-&gt;description) 应该可以工作
  • @lagbox 首先适用于这两种方法,其次 - 仅适用于 update,不适用于 store。谢谢!

标签: laravel laravel-blade laravel-8


【解决方案1】:

&gt;@if"@isset 将被解析为字符串,因为@ 只有在不与除空格、换行符或制表符之外的其他字符连接时才会被解析为语法。如果条件没有@ inside {{}},你可以这样做。

我有一个更好的解决方案,使用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>

【讨论】:

  • 我更改了代码,但在描述字段中没有显示old('description')。在标签字段中出现错误:语法错误,意外'->'(T_OBJECT_OPERATOR),期望')'
  • old('description') 如果您使用重定向 -&gt;withInput(); 将显示
  • 对于标签我更新了代码,只是函数 arg 出错了
  • 旧的描述仍然不适用于withInput()。在我的代码中,它没有withInput(),但有额外的空格。在标签输入中出现新错误 - “未定义变量:tag_name”,我认为是因为未使用数据透视表中的“tagged”。
  • $tag_name改成$post-&gt;tagged
【解决方案2】:

我使用指令 @php 解决了我的问题。

<textarea id="description" name="description" rows="3">@php
        if(old('description')) {
            echo old('description');
        } elseif (isset($post)){
            echo $post->description;
        } 
    @endphp</textarea>

没有多余的空格。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-24
    • 2019-05-26
    • 2018-07-20
    • 2020-08-03
    • 2021-05-21
    • 2020-02-26
    • 2020-11-02
    • 1970-01-01
    相关资源
    最近更新 更多