我在理解如何在Laravel中将变量从一个视图传递到另一个视图时遇到了一些麻烦。
我所做的就是我做了一个路由器,一旦用户登录就将用户重定向到我的主页面。在我的控制器返回视图之前,路由器会创建两个包含从数据库链接到用户的客户和服务数据。
public function index()
{
$customers = Customer::where('CardCode', Auth::user()->customer)->first();
$serviceCalls = ServiceCall::where('customer', Auth::user()->customer)->get();
return view('pages.logged', compact('customers', 'serviceCalls'));
}
之后,视图将返回给用户,该用户显示一个Table,其中包含使用Blade的对象的一些信息。
@foreach ($serviceCalls as $serviceCall)
@if ($serviceCall->status != -1)
<tr>
<td><a href="{{ route('service', $serviceCall) }}">{{$serviceCall->subject}}</a></td>
<td>{{$serviceCall->custmrName}}</td>
<td>{{$serviceCall->convertStatusToText($serviceCall->status)}}</td>
</tr>
@endif
@endforeach
正如您所看到的,我已尝试在第一个“td”中创建一个链接。在此链接中,我尝试将当前的$ serviceCall传递给路由器。
路由器:
Route::get('/logged/efforts', 'AppController@showServiceCall')->name('service');
AppController功能:
public function showServiceCall(ServiceCall $serviceCall)
{
return view('pages.test', compact('serviceCall'));
}
现在我面临的问题如下。 每当我尝试在锚点href标记内传递变量时,数据都会传递到URL中。这导致用户能够操纵URL以从数据库访问不同的$ serviceCall。
我想要实现的是能够将变量传递给某个地方&#39;用户无法查看/操作输入数据,并在第二个视图中访问该变量。
我尝试将ID作为字符串传递,并在返回View之前从控制器中的数据库中获取相应的对象。但是这导致ID显示在URL中并且没有像有远见的那样工作。我试过调查Sessions,但我认为这不是正确的方法。
我在PHP和Laravel方面的经验非常有限,所以我正在寻找帮助我朝正确方向前进的提示。 谢谢。 (PS。我很抱歉,如果我的描述中含糊不清。很多来自C#和Java的新东西)
答案 0 :(得分:0)
首先将您的route
更改为url
中的参数 - < - p>
Route::get('/logged/efforts/{service_id}', 'AppController@showServiceCall')->name('service');
在view
-
<a href="{{ route('service', ['service_id'=>$serviceCall->id]) }}">{{$serviceCall->subject}}</a>
再次在你的控制器regenerate
服务 -
public function showServiceCall($service_id)
{
$serviceCall = ServiceCall::find($service_id);
return view('pages.test', compact('serviceCall'));
}