【问题标题】:pass variable through blade pagination通过刀片分页传递变量
【发布时间】:2021-03-09 07:24:45
【问题描述】:

我需要在 laravel 刀片上使用分页,但是控制器又出现了一个不通过分页的变量,我该如何解决?

<div class="main-content">
                <div class="breadcrumb">
                    <h1>Página de Cliente</h1>
                </div>
                <div class="separator-breadcrumb border-top"></div>
                <div class="card user-profile o-hidden mb-4">
                    
                    <div class="user-info"><img class="profile-picture avatar-lg mb-2"  alt="" />
                        <p class="m-0 text-24">{{ $customer->name }}</p>
                        <p class="text-muted m-0">{{ $customer->email }}</p>
                    </div>
                    <div class="card-body">
                        <ul class="nav nav-tabs profile-nav mb-4" id="profileTab" role="tablist">
                            <li class="nav-item"><a class="nav-link active" id="timeline-tab" data-toggle="tab" href="#timeline" role="tab" aria-controls="timeline" aria-selected="false">Propostas</a></li>
                            <li class="nav-item"><a class="nav-link" id="about-tab" data-toggle="tab" href="#about" role="tab" aria-controls="about" aria-selected="true">#</a></li>
                            <li class="nav-item"><a class="nav-link" id="friends-tab" data-toggle="tab" href="#friends" role="tab" aria-controls="friends" aria-selected="false">#</a></li>
                            <li class="nav-item"><a class="nav-link" id="photos-tab" data-toggle="tab" href="#photos" role="tab" aria-controls="photos" aria-selected="false">#</a></li>
                        </ul>
                        <div class="tab-content" id="profileTabContent">
                            <div class="tab-pane fade active show" id="timeline" role="tabpanel" aria-labelledby="timeline-tab">
                                <div class="row mb-4">
                                    <div class="col-md-12 mb-3">
                                        <div class="card text-left">
                                            <div class="card-body">
                                                <h4 class="card-title mb-3">Lista de Propostas</h4>    
                                                <div class="table-responsive">
                                                    <table class="table">
                                                        <thead>
                                                            <tr>
                                                                <th scope="col">#</th>
                                                                <th scope="col">Data</th>
                                                                <th scope="col">Vendedor</th>
                                                                <th scope="col">Produto</th>
                                                                <th scope="col">Preço</th>
                                                                <th scope="col">Produção</th>
                                                            </tr>
                                                        </thead>
                                                        @foreach($proposals as $proposal)
                                                            <tbody>        
                                                                <tr>
                                                                    <th scope="row"> {{ $proposal->id_proposal }} </th>
                                                                    <td> {{ $proposal->date }} </td>
                                                                    <td> {{$proposal->users()->first()->name }} </td>
                                                                    
                                                                    
                                                                    <td>
                                                                    @foreach($proposal->proposed_phases()->get() as $proposedphase)
                                                                    <p>{{ $proposedphase->features()->first()->name }}</p>
                                                                    @endforeach
                                                                    </td>
                                                                    <td>
                                                                    @foreach($proposal->proposed_phases()->get() as $proposedphase)
                                                                    <p>{{ $proposedphase->amount }}€</p>
                                                                    @endforeach
                                                                    </td>
                                                                    
                                                                    @if($proposal->id_production == null)
                                                                    <td><span class="badge badge-danger">Produção</span></td>
                                                                    @else
                                                                    <td><span class="badge badge-success">Produção</span></td>
                                                                    @endif
                                                                   
                                                                    @if($proposal->id_production == null)
                                                                    <td>
                                                                        <a href="{{ URL::route('new.production', array('id_proposal'=>$proposal->id_proposal)) }}" class="text-success mr-2">
                                                                            <button class="nav-icon i-Add font-weight-bold btn btn-success m-0" type="button" data-toggle="tooltip" data-placement="top" title="Criar Produção"></button>
                                                                        </a>
                                                                    </td> 
                                                                    @else
                                                                    <td>
                                                                        <a href="{{ URL::route('new.label', array('id_proposal'=>$proposal->id_proposal)) }}" class="text-success mr-2">
                                                                            <button class="nav-icon i-Add font-weight-bold btn btn-warning m-0" type="button" data-toggle="tooltip" data-placement="top" title="Criar Etiquetas"></button>
                                                                        </a>
                                                                    </td> 
                                                                    @endif          
                                                                </tr>    
                                                            </tbody>  
                                                        @endforeach
                                                    </table>
                                                    {{-- Pagination --}}
                                                        <div class="d-flex justify-content-center">
                                                            {!! $proposals->links() !!}
                                                        </div>
                                                </div>
                                            </div>
                                        </div>
                                    </div>

控制器

public function PageCustomer(Request $request)
        {
            $data = $request->all();
            $customer = customer::where('id_customer', $data['id_customer'])->first();
            $proposals = proposal::where('id_customer', $customer['id_customer'])->paginate(5);

            return view('admin.customer.page_customer', compact('customer', 'proposals'));
        }

没有传到第二页的变量是$customer 我试图传递一个带有name和email的值的数组,但是没有用。我该如何解决这种情况?

【问题讨论】:

  • 您真正需要做的是在您的路线中使用客户 ID,例如 pageCustomer\{customer_id}\proposals
  • 它不起作用怎么办?发生了什么事?
  • @lagbox 当我们单击第二页时,laravel 使用更新的第二页的 foreach 信息重新加载刀片,但是来自控制器的 $customer 变量丢失了,我需要将该变量传递给第 2 页

标签: php laravel model-view-controller bootstrap-4 laravel-blade


【解决方案1】:

在 Paginator 上使用 appends

{!! $proposals->appends(['customer' => $customer])->links() !!}

Laravel 7 开始,您可以在 Paginator 实例上调用 withQueryString() 方法:

{!! $proposals->withQueryString()->links() !!}

withQueryString() 方法将所有当前查询字符串值附加到分页链接。

【讨论】:

  • 不明白这会有什么帮助。刀片视图具有要在页面上显示的 $ustomer-&gt;name$customer-&gt;email 值。 appendswithQueryString 将附加到 url 查询参数,它在刀片视图中仍然不可用。我们可以将整个 eloquent 模型对象作为查询参数传递吗?
  • @Donkarnash,您正在传递查询字符串,该字符串通过控制器并使用该查询字符串在第二页上发送对象。同样的方法也发生在{{ $users-&gt;links() }},它给你一个查询字符串,如?page=1?page=2,你会在每个页面上使用该查询字符串得到不同的数组对象
  • 好的,知道了。在控制器中,客户记录是根据请求数据提取的——现在我明白了。谢谢
猜你喜欢
  • 2019-08-05
  • 2022-01-01
  • 2020-05-20
  • 1970-01-01
  • 2014-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多