【问题标题】:Pagination with Laravel Blade使用 Laravel Blade 进行分页
【发布时间】:2022-01-13 00:26:09
【问题描述】:

我正在尝试使用分页返回数据。当我将数据作为 paginate() 返回时,我收到一个错误:htmlspecialchars() expects parameter 1 to be string, array given

我的控制器:

$tickets = Ticket::where('company_id', Auth::user()->company_id)->paginate(3);

刀片:

            <table class="bg-white overflow-hidden table-auto w-full flex-row flex-no-wrap whitespace-nowrap">
            <tr>
                <th></th>
                <th class="bg-white px-4 py-2">Updated at</th>
                <th class="bg-white px-4 py-2">Case Title</th>
                <th class="bg-white px-4 py-2">Manager</th>
                <th class="bg-white px-4 py-2">Case ID</th>
                <th class="bg-white px-4 py-2">Remaining</th>
                <th class="bg-white px-4 py-2">Status</th>
            </tr>
            @foreach($tickets as $ticket)
            <tr class="bg-gray-100 text-center">
                <td class="px-2"><span class="text-blue-900 font-bold text-xs">
                        @if($ticket->isNew($ticket->created_at))
                        New
                        @endif
                    </span></td>
                <td class="px-4">{{ $ticket->updated_at }}</td>
                <td class="px-4 py-4">{{ $ticket->title }}</td>
                <td class="px-4 py-4">{{ $ticket->getAdmin->first_name }} {{ $ticket->getAdmin->last_name }}</td>
                <td class="px-4 py-4">{{ $ticket->id }}</td>
                <td class="px-4 py-4">
                    @php
                    $dueDate = \Carbon\Carbon::parse($ticket->end_date);
                    @endphp
                    @if($dueDate->isPast())
                    <span class="text-red-600">Overdue</span>
                    @else
                    {{ $ticket->remaining_date() }} Days
                    @endif
                </td>

                <td class="px-4 py-4">
                    @if($ticket->status == 1)
                    <span class="bg-yellow-500 font-semibold text-white p-2 rounded">Active</span>
                    @endif
                    @if($ticket->status == 2)
                    <span class="bg-blue-500 font-semibold text-white p-2 rounded">Closed</span>
                    @endif
                    @if($ticket->status == 3)
                    <span class="bg-red-800 font-semibold text-white p-2 rounded">Late</span>
                    @endif
                </td>
                </td>
            </tr>
            @endforeach
        </table>
        
        {{!! $tickets->links() !!}}

我不明白为什么我会收到错误并尝试通过 Google 解决它。为什么会出现错误,解决方法是什么?

【问题讨论】:

  • 它的 {!! 不是 {{!! ... 它说是哪一行导致了错误?
  • 应该是{{ $tickets-&gt;links() }},根据documentation
  • @aynber 它可以是因为links 返回一个视图并且视图是 Htmlable 所以它不会被转义......但我同意 {{ 作为更安全的选择
  • @lagbox 哎呀,只是复制了错误的版本,但它仍然是同样的错误。它指的是第 118 行的 helpers.php(返回 htmlspecialchars($value ?? '', ENT_QUOTES, 'UTF-8', $doubleEncode)
  • 该函数正在查找Pagination 的任何可能翻译,因此请检查该短语的任何自定义语言文件。

标签: php laravel pagination laravel-blade


【解决方案1】:

更新你的 Laravel 版本。这是 8.78 的一个重大错误。他们尝试为屏幕阅读器更改Pagination Navigation,但它破坏了某些翻译设置,所以它被恢复了。详情在https://github.com/laravel/framework/pull/39928

@taylorotwell @xanderificnl 这实际上引入了一个破坏 Tailwind 分页的 bug,理想情况下应该恢复它。

尝试使用 Tailwind 分页时,我看到以下内容:htmlspecialchars(): Argument #1 ($string) must be of type string, array given (View: /var/www/html/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/tailwind.blade.php)

导致问题的行:

<nav role="navigation" aria-label="{{ __('Pagination') }}" class="flex items-center justify-between">

这是由于 Laravel 默认附带 resources/lang/en/pagination.php 文件。这个PR导致分页语言文件返回的数组传入__()方法,导致解析异常。

【讨论】:

  • 谢谢,帮我解决了!
  • 不错的收获
  • @lagbox 谢谢。当我注意到他的 tailwind.blade.php 与我的不匹配时,我就掉进了兔子洞
  • 当他们引入重大更改时总是很好:) ... fun timez
猜你喜欢
  • 2021-09-09
  • 2017-12-06
  • 2014-09-01
  • 2015-01-01
  • 2020-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多