美文网首页
Laravel Basic - 4 - 加入更多页面以及auth

Laravel Basic - 4 - 加入更多页面以及auth

作者: 芒鞋儿 | 来源:发表于2021-02-11 01:21 被阅读0次
  1. Button 以及页面跳转设置
    要在"add to Cart" button 上设置click后页面跳转并传data
  • 在allproducts.blade.php的add to Cart 下设置如下:
<a href="{{route('AddToCartProduct',['id'=>$product->id])}}" class="btn btn-default add-to-cart"><i class="fa fa-shopping-cart"></i>Add to cart</a>
  • Route设置如下:
Route::get('products/addToCart/{id}',['uses'=>'ProductsController@addProductToCart','as'=>'AddToCartProduct']);

设置格式:Route::get('<相对URI+id>',['uses'=>'<controller name>@<function name>','as'=>'<identified name in view php file>']);

  • 添加Cart model:

Class Cart extends Model {

   public $items; // ['id'=>,'quantity'=>,'data'=>$product]
   public $totalQuantity;
   public $totalPrice;

   public function __construct($prevCart) 
   {
       if($prevCart != null){
           $this->items = $prevCart->items;
           $this->totalQuantity = $prevCart->totalQuantity;
           $this->totalPrice = $prevCart->totalPrice;
       }else{
           $this->items = [];
           $this->totalQuantity = 0;
           $this->totalPrice = 0;
       }
   }

   public function addItem($id, $product) 
   {
       $price = (int) str_replace("$","",$product->price);
       if(array_key_exists($id,$this->items)){
           $productToAdd = $this->items[$id];
           $productToAdd['quantity']++;
       }else {
           $productToAdd = ['quantity'=>1, 'price'=> $price, 'data'=>$product];
       }

       $this->items[$id] = $productToAdd;
       $this->totalQuantity++;
       $this->totalPrice = $this->totalPrice + $price;
   }
}

此处可以看到model 层可以做很多处理,model 层的数据是内存的数据,stateless 的,而DB所储存的是stateful的数据。model 层的作用是在展示到页面或者保存到DB中对数据做一些处理。

  • 在controller中加入对应的function
    public function addProductToCart(Request $req,$id) 
    {
        $prevCart = $req->session()->get('cart');
        $cart = new Cart($prevCart);
        $product = Product::find($id);
        $cart->addItem($id,$product);

        $req->session()->put('cart',$cart);

        //dump($cart);
        return redirect()->route('allproducts');
    }

如果要返回product页面,如下:

return redirect()->route('allproducts'); //'allproducts' 在route中定义。
  1. 添加EC的购物车页面和route
  • 添加route:
 //show cart items
 Route::get('cart', ['uses'=>'ProductsController@showCart','as'=>'cartproducts']);
  • 在controller中添加showCart function
    public function showcart() 
    {
        $cart = Session::get('cart');
        if($cart) {
            
            return view('cartproducts',['cartItems'=>$cart]);
        }else{
            
            return redirect()->route('allproducts');
        }
        
    }

- 关于view('xxx'): 在此处view指向的page名:cartProducts.blade.php,但显示正常,似乎在laravel7当中会自动修正大小写,但最好和view的文件名保持一致。
- Session::get('cart')和$req->session()->get('cart')是一样的。

  • 添加购物车页面:
@foreach($cartItems->items as $item)

<td class="active">{{$item['data']['id']}}</td>
<td class="active"><img src="{{Storage::disk('local')->url('product_images/').$item['data']['image']}}" width="100" height="100"></td>
<td class="active">{{$item['data']['name']}}</td>
<td class="active">{{$item['data']['type']}}</td>
<td class="active">{{$item['data']['price']}}</td>
@endforeach
  • Icon上跳转的修改
<li><a href="{{route('cartproducts')}}"><i class="fa fa-shopping-cart"></i> Cart</a></li>

讲模板中右上角cart icon的跳转静态Page改设成route的名

  1. Auth 功能的plugin
    用artisan 命令可以生成auth
php artisan make:auth

自动生成route,以及对应的view, controller和认证的页面。
使用方式,在需要控制的页面加入如下例子的控制语句:

@if(Auth::check())
 <li><a href="/home"><i class="fa fa-lock"></i> Profile</a></li>
@else
 <li><a href="/home"><i class="fa fa-lock"></i> Login</a></li>
@endif

相关文章

网友评论

      本文标题:Laravel Basic - 4 - 加入更多页面以及auth

      本文链接:https://www.haomeiwen.com/subject/hxlqxltx.html