如何在Laravel(PHP)中将对象从视图传递到视图?

时间:2018-01-25 16:53:07

标签: php laravel

我在理解如何在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的新东西)

1 个答案:

答案 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'));
}