首页 > 解决方案 > 从控制器中的 url 获取 id 值并显示关联 laravel 的值

问题描述

我正在尝试使用 laravel jetstream 和 livewire 创建一个票务管理系统。在用户页面中有一个表格,其中包含用户创建的所有票证。当用户点击按钮打开一个特定的工单时,它应该传递工单的 id 并重定向到另一个页面,在那里它接收他单击的工单的数据,如标题、消息等。

id 是通过 url 传递的,但我的主要问题是,每当我尝试在视图中显示该数据时,什么都没有显示,也没有错误。我认为我的控制器可能有问题。

这是我的路线:

Route::get('tickets.answers/{id}', [TicketsController::class, 'answers']);

重定向到该特定工单的按钮:

<a href="{{ url('tickets.answers' . '/'. $ticket->id ) }}" >    <x-jet-secondary-button >
                See Answer
</x-jet-secondary-button></a>

答案控制器:

  public function render(Request $request)
    {
        $tickets =  Ticket::where('id', $request->url('id'));
        
             
    return view('livewire.tickets.answers', [
        'tickets' => $tickets,
       
    ]);
    }

以及我如何尝试在刀片中显示:

@foreach($tickets as $key => $ticket)
<!-- This example requires Tailwind CSS v2.0+ -->
<div class="bg-white shadow overflow-hidden sm:rounded-lg">
    <div class="px-4 py-5 sm:px-6">
      <h3 class="text-lg leading-6 font-medium text-gray-900">
        Ticket nº {{$ticket->id}} - {{$ticket->title}}
      </h3>
     
    </div>
</div>
    @endforeach

标签: laravellaravel-livewirejetstream

解决方案


在你的TicketsController你可以拿id这样的

public function answer(Request $request, int $id)
{
    // Use the find() method, instead of where(), when searching for the primary key
    $tickets =  Ticket::find($id);

    // .. more
        
}

在你的路由文件中你指定一个answer方法,所以在你的TicketsController.

// See how to name a route
Route::get('tickets.answers/{id}', [TicketsController::class, 'answers'])->name('tickets.answers');

然后在您的视图中使用命名路由,如下所示:

<a href="{{ route('tickets.answers', ['id' => $ticket->id]) }}">

你可以在Laravel 文档中看到一个类似的例子。


推荐阅读