我正在使用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);
}
答案 0 :(得分:4)
如何用登录按钮替换结帐按钮,然后再次重定向到购物车结帐?