在线购物车与Laravel

时间:2014-10-31 12:34:09

标签: php laravel paypal

我正在使用Laravel和Moltin/Cart为在线商店构建购物车系统。到目前为止,我已经设法整合了Cart系统并继续使用paypal。 虽然,在我的控制器中,我有一个构造函数,阻止用户查看,添加或删除购物车中的项目,除非他经过身份验证。

public function __construct() {
    parent::__construct();
    $this->beforeFilter('csrf', array('on'=>'post'));
    $this->beforeFilter('auth', array('only'=>array('postAddtocart', 'getCart', 'getRemoveitem')));
}

为了使paypal工作,我必须在我的视图中添加几个隐藏的输入,以获取必要的值并将它们传递给paypal的付费页面,如下所示:

<input type="hidden" name="cmd" value="_xclick">
<input type="hidden" name="business" value="office@shop.com">
<input type="hidden" name="item_name" value="eCommerce Store Purchase">
<input type="hidden" name="currency_code" value="EUR">
<input type="hidden" name="amount" value="{{ Cart::total() }}">
<input type="hidden" name="first_name" value="{{ Auth::user()->firstname }}">
<input type="hidden" name="last_name" value="{{ Auth::user()->lastname }}">
<input type="hidden" name="email" value="{{ Auth::user()->email }}">

{{ HTML::link('/', 'Continue Shopping', array('class'=>'btn btn-default')) }}
<input type="submit" value="Checkout with Paypal" class="btn btn-primary">

问题是用户不应该登录以查看,添加或删除购物车中的商品,而是在单击提交按钮时要求登录。如果我从构造函数中删除过滤器,那么我得到一个&#34;尝试获取非对象的属性&#34;错误,因为使用Auth类的隐藏输入。我曾尝试添加刀片,如果auth :: check条件,但这不是解决方案。有什么建议?

答案

这就是诀窍:

@if(!Auth::check())

      {{ HTML::link('users/signin', 'Sign in to pay', array('class'=>'btn btn-primary')) }}

@else
<input type="hidden" name="first_name" value="{{ Auth::user()->firstname }}">
<input type="hidden" name="last_name" value="{{ Auth::user()->lastname }}">
<input type="hidden" name="email" value="{{ Auth::user()->email }}">

{{ HTML::link('/', 'Continue Shopping', array('class'=>'btn btn-default')) }}
<input type="submit" value="Checkout with Paypal" class="btn btn-primary">
@endif

此外,我从构造函数中删除了过滤器并更改了登录功能中的重定向,以便重定向到以前访问过的页面。

使用会话变量来保存以前访问过的网址

要返回之前访问过的页面,您需要使用session::put

因此,在getSignin函数中添加:

Session::put('previous_url', URL::previous());

在postSignin函数中,您需要检索存储在会话中的previous_url变量,如下所示:

if ( Session::has('previous_url') )
{
     $url = Session::get('previous_url');
     Session::forget('previous_url');
     return Redirect::to($url);
}

1 个答案:

答案 0 :(得分:4)

如何用登录按钮替换结帐按钮,然后再次重定向到购物车结帐?