使用[Laravel]重定向路由时有两个参数

7

我有一个问题,无法在重定向路由中使用“with”传递两个变量。这是我的代码...

如何解决这个问题?

return Redirect::route('cart-success')->with(
            array(
                'cartSuccess' => 'You successfuly ordered. To track your order processing check your email', 
                'cartItems' => Cart::contents()
            )
        );

以下是错误信息:

Undefined variable: cartItems (视图位置:C:\xampp\htdocs\laravel-webshop\laravel\app\views\cart-success.blade.php)

Route::group(array('before' => 'csrf'), function() {
    //Checkout user POST
    Route::post('/co-user', array(
        'as' => 'co-user-post',
        'uses' => 'CartController@postCoUser'
    ));
});

控制器

public function postCoUser() {
    $validator = Validator::make(Input::all(), array(
        'cardholdername' => 'required',
        'cardnumber' => 'required|min:16|max:16',
        'cvv' => 'required|min:3'
    ));

    if($validator->fails()) {
        return Redirect::route('checkout')
                ->withErrors($validator)
                ->withInput();
    } else {
        return Redirect::route('cart-success')->with(
            array(
                'cartSuccess' => 'You successfuly ordered. To track your order processing check your email', 
                'cartItems' => Cart::contents()
            )
        );
    }
}

视图

 @extends('publicLayout.main')

 @section('content')
   @if(Session::has('cartSuccess'))
    <p>{{ Session::get('cartSuccess') }}</p>

    <?php $total = 0; ?>
    @foreach ($cartItems as $cartItem)
        Name: {{ $cartItem->name }} <br>
        Price: {{ $cartItem->price }} &euro;<br>
        Quantity: {{ $cartItem->quantity }} <br>
        <?php $final = $cartItem->price * $cartItem->quantity; ?>
        Final price: {{ $final }} &euro;<br>
        <?php $total += $final; ?>
        <hr>
    @endforeach
    Total: {{ $total }} &euro;
 @endif
@stop

Redirect::with()设置会话变量,而不是设置视图变量。方法在路由cart-success中定义在哪里?从那里,您将需要检索会话值并使用View::make()将该值传递到您的视图。 - JofryHS
我需要Session变量...我可以得到一个Session变量但是不能得到两个...这是问题。 - user3809590
route('cart-success') 去哪里了?您能发布该路由的代码(控制器方法)吗? - JofryHS
仍然没有显示cart-success在哪里?你只展示了POST路由,而不是提交后的路由(成功路由)。 - JofryHS
我又编辑了一遍...这是你需要的吗? - user3809590
3个回答

14

您可以尝试这个:

return Redirect::route('cart-success')
               ->with('cartSuccess', 'You successfuly ordered. To track your order processing check your email')
               ->with('cartItems', Cart::contents());

或者这个:

return Redirect::route('cart-success', array('cartSuccess' => '...', 'cartItems' => '...'));

我检查了第一部分 ->with('cartSuccess', 'You successfuly ordered.) 你能解释一下我如何在视图中访问 cartSuccess key 吗? - Pankaj
重定向时,with 方法将使用会话中的键存储数据,因此您可以使用 Session::get('cartSuccess') 从会话中访问 key 的值。 - The Alpha
有没有其他更便宜的方法来做这件事,我不想在会话中存储这种信息。你能指导一下吗? - Pankaj
@TheAlpha return Redirect::route('cart-success', array('cartSuccess' => '...', 'cartItems' => '...')); 现在如何在视图 cartSuccess 中访问此键?我尝试使用 Session::get('cartSuccess'),但没有返回任何内容。 - Yousef Altaf
@YousefAltaf,是的。 - The Alpha
@TheAlpha 谢谢,我明白了,在这种情况下我应该使用 foreach - Yousef Altaf

0

你可以像这样传递两个变量

$response=array('cartSuccess' => 'You have successfully ordered. To track your order processing check your email', 'cartItems' => Cart::contents());    

return Redirect::route('cart-success',$response);

0

你也可以使用这个,它可以帮助保持代码格式与通常路线相同。

return \Redirect::route('your.route.name',['param1'=>'param1_value','param2'=>'param2_value']);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接