首页 > 解决方案 > 在 Blade 视图中保留前导零

问题描述

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

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

我的方法是显示 id,<td>{{ sprintf('%04d', $tool->id) }}</td>但并非所有 id 都有 4 个字符,但链接仍然是 like 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

从我的工具控制器:

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

标签: phplaravellaravel-blade

解决方案


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

class Tool extends Model
{
    public $incrementing = false;
    ....

推荐阅读