在 Blade 视图中保留前导零

Posted

技术标签:

【中文标题】在 Blade 视图中保留前导零【英文标题】:Preserving leading zeros in Blade view 【发布时间】:2020-07-13 15:25:05 【问题描述】:

我正在使用 Blade 视图编写一个 Laravel 7 应用程序。我的一个 mysql 表包含客户端 tools,其 id 没有遵循特定模式(重组这些 id 不在讨论范围内,因为它们来自另一个系统,客户端不会更改)。其中一些 id 有一个前导零,应该显示在所有视图中,例如055A。

ID 以前导零存储在数据库中 (varchar(64)),没有问题。但是当刀片视图显示 ids 时,前导零消失了,而且指向 editdelete 的链接就像 myapp/public/tool/5A5/edit 一样导致错误 ofc。

我的方法是用<td> sprintf('%04d', $tool->id) </td> 显示ID,但并非所有ID 都有4 个字符,并且链接仍然像myapp/public/tool/5A5/edit,因为Blade 采用了整个$tool 对象。这是我认为的部分:

@foreach($tools as $tool)
<tr>
   <td> sprintf('%04d', $tool->id) </td> //not enough!
   <td> $tool->title </td>
   <td style="text-align: center;"> $tool->tooltype->name </td>
   @can('manage-tools', App\User::class)
   <td class="td-actions text-right">
      <form action=" route('tool.destroy', $tool) " method="post">
         @csrf  
         <a rel="tooltip" class="btn btn-success btn-link" href=" route('tool.edit', $tool) " data-original-title="" title="">
            <i class="material-icons">edit</i>
            <div class="ripple-container"></div>
         </a>
         @method('delete')
         <button type="button"  value="disabled" disabled class="btn btn-danger btn-link" data-original-title="" title="delete" 
         onclick="confirm(' __("Wirklich löschen?") ') ? this.parentElement.submit() : ''">
         <i class="material-icons">close</i>
         <div class="ripple-container"></div>
         </button>
      </form>
   </td>
   @endcan
</tr>
@endforeach

来自我的 ToolController:

public function index(Tool $model)

  $this->authorize('manage-tools', User::class);
  return view('tools.index',['tools' => $model->get()]); 

【问题讨论】:

我在帖子中添加了控制器功能,不,我不进行迁移。 在执行return view('tools.index',['tools' =&gt; dd($model-&gt;get())]); 时,会保留零,05A5 仍然存在。 是的,$tool-&gt;id5A5 也适用于 href=" route('tool.edit', $tool) " 不,同样的事情,没有零。这可能是 php 配置问题吗? 耶!就是这样!只是让它成为一个答案,所以我可以给你学分。当字符串不能递增时,这个选项是什么以及它如何用于 varchar 字段? 【参考方案1】:

Laravel 会在幕后做一些“魔术”来优雅地处理 id 字段,例如去除前导零。由于在大多数情况下,模型 ID 都是递增的,因此默认情况下会附带此行为。您可以在没有递增 id 字段的模型上使用以下设置禁用此行为。在你的情况下:

class Tool extends Model

    public $incrementing = false;
    ....

【讨论】:

以上是关于在 Blade 视图中保留前导零的主要内容,如果未能解决你的问题,请参考以下文章

导出为 CSV 时,如何在列中保留前导零?

删除前导零和尾随零并将结果保留到小数点后两位

Blade:在多个子视图中扩展模板

转换为二进制并保留前导零

将使用 PHP 创建的 csv 文件导入 Excel 时,如何在数字字符串值中保留前导零?

如何保留int变量的前导零?