Сохранение ведущих нулей в представлении Blade - PullRequest
1 голос
/ 13 июля 2020

Я пишу приложение Laravel 7, используя Blade views. Одна из моих таблиц MySQL содержит клиентов tools, у которых есть id, который не следует конкретному шаблону c (реструктуризация этих идентификаторов не обсуждается, поскольку они поступают из другой системы, которую клиент не изменит). Некоторые из этих идентификаторов имеют начальный ноль, который должен отображаться во всех представлениях, например, например, 055A.

Идентификаторы хранятся с ведущими нулями в базе данных (varchar (64)), здесь нет проблем. Но когда представление лезвия показывает идентификаторы, ведущий ноль пропадает, и, более того, ссылка на edit и delete похожа на myapp/public/tool/5A5/edit, что приводит к ошибке c.

Мой подход должен был показать идентификаторы с <td>{{ sprintf('%04d', $tool->id) }}</td>, но не все идентификаторы имеют 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()]); 
}

1 Ответ

1 голос
/ 13 июля 2020

Laravel будет делать некоторые "magi c" за кулисами, чтобы изящно обрабатывать поля id, например, удаляя ведущие нули. Поскольку в большинстве случаев идентификаторы модели увеличиваются, по умолчанию используется это поведение. Вы можете отключить это поведение, используя следующий параметр в Модели, у которой нет поля увеличивающегося идентификатора. В вашем случае:

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