Laravel 5:无法通过重定向将数据传递给控制器

时间:2015-06-30 21:49:08

标签: php laravel laravel-5 url-redirection

我正在尝试传递查询构建器以进行查看,我想要打印它。查询构建器不返回null,但我无法传递或打印它。

控制器

public function search() {
    $option1 = Request::get( 'option1' );
    $option2 = Request::get( 'option2' );
    $condition = Request::get( 'condition' );
    $date_option = Request::get( 'dateOption' );
    $option1_value = Request::get( 'option1_value' );
    $option2_value = Request::get( 'option2_value' );
    $fromDate = Request::get( 'fromDate' );
    $toDate = Request::get( 'toDate' );

    if ( $condition == 'no' ) {
        $vehicles = Vehicle::with( 'brand', 'section', 'representive', 'buyer', 'seller', 'buyingPaymentType', 'sellingPaymentType' )->where( $option1, $option1_value )->get();
        //return $vehicle;
    }
    if ( $condition == 'or' ) {
        $vehicles = Vehicle::with( 'brand', 'section', 'representive', 'buyer', 'seller', 'buyingPaymentType', 'sellingPaymentType' )->where( $option1, $option1_value )->orWhere( $option2, $option2_value )->get();
    }
    if ( $condition == 'and' ) {
        $vehicles = Vehicle::with( 'brand', 'section', 'representive', 'buyer', 'seller', 'buyingPaymentType', 'sellingPaymentType' )->where( $option1, $option1_value )->where( $option2, $option2_value )->get();
    }

    return  redirect()->back()->with( 'vehicles', $vehicles );
    //return $vehicles;
}

查看

@if(isset($vehicles))
    @foreach($vehicles as $vehicle)
        <td>{{ $vehicle->id }}</td>
    @endforeach
@endif

我做错了什么?任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

使用with('vehicles', $vehicles)方法上的redirect()重定向会创建vehicles会话Flash消息,而不是将数据传递到下一个控制器(请参阅Laravel 5.1 Redirect Documentation)。

It seems that you can't send variables per se,因此您必须依赖会话数据。

您可以使用session->has('vehicles')session->('vehicles')帮助程序测试您的视图中是否设置了Flash消息:

@if(session()->has('vehicles')))
    {{ session('vehicles') }}
@endif

由于您的$vehicles是一个复杂的对象,因此您必须检查Laravel如何处理将其序列化为会话,并且可能需要在对项目进行循环之前对其进行反序列化。

答案 1 :(得分:0)

使用重定向时,您可以使用会话

@if(Session::has('vehicles'))
    @foreach(Session::get('vehicles') as $vehicle)

    @endforeach
@endif

答案 2 :(得分:0)

问题在于,虽然你已经将$ vehicles数组闪存到会话中(这与你的代码一样工作),但你永远不会把它读回来。我认为你期望在会话中放置一些东西会在下次加载时自动将它放回变量中,但事实并非如此。

相反,您需要从会话中读取变量。类似的东西:

和以前一样:

return  redirect()->back()->with( 'vehicles', $vehicles );    

然后,只要处理上一条路线,您就可以阅读会话并检查它是否为空;

$vehicles = \Session::get('vehicles');

然后你可以像往常一样使用它。您也可以直接从Blade模板访问会话变量,就像Elvin向您展示的那样。