laravel extendable basket fornece várias classes abstratas que implementam a funcionalidade básica do cesto de comércio eletrônico. Essas classes devem ser estendidas pela sua aplicação.
Basta instalar a versão mais recente usando o compositor.
composer require divineomega/laravel-extendable-basket
Você precisa executar várias etapas de configuração para usar este pacote.
Duas tabelas de banco de dados são necessárias para armazenar dados da cesta e dos itens da cesta. Por padrão, eles são chamados baskets
e basket_items
. Este pacote fornece migrações de banco de dados para criar essas tabelas.
Para executar essas migrações, insira o seguinte comando artesão.
php artisan migrate
Agora você precisa criar dois modelos relacionados, um para conter os detalhes da cesta e outro para conter os detalhes dos itens da cesta. Dois modelos de exemplo são mostrados abaixo. Eles podem ser modificados ou adicionados conforme necessário.
Crie um modelo de cesta.
# app/Basket.php
<?php
namespace App ;
use DivineOmega LaravelExtendableBasket Models Basket as BasketModel ;
class Basket extends BasketModel
{
public function items (): HasMany
{
return $ this -> hasMany ( ' AppBasketItem ' );
}
}
Crie um modelo BasketItem.
# app/BasketItem.php
<?php
namespace App ;
use DivineOmega LaravelExtendableBasket Models BasketItem as BasketItemModel ;
class BasketItem extends BasketItemModel
{
public function basket (): BelongsTo
{
return $ this -> belongsTo ( ' AppBasket ' );
}
}
Qualquer coisa que possa ser colocada na cesta fornecida por esta biblioteca é considerada 'cestável'. Você pode transformar qualquer modelo existente do Eloquent em cesto simplesmente fazendo com que ele implemente a interface Basketable
.
Por exemplo, se você tivesse um modelo Product
, poderá alterá-lo da seguinte maneira.
# app/Product.php
<?php
namespace App ;
use Illuminate Database Eloquent Model ;
use DivineOmega LaravelExtendableBasket Interfaces Basketable ;
class Product extends Model implements Basketable {
// ...
}
Observe que qualquer modelo de cesta deve ter um método getPrice()
e getName()
que retorne um preço numérico e um nome textual da cesta, respectivamente.
Esta seção descreve o uso da cesta e da funcionalidade de item da cesta fornecida por este pacote. Presume-se que você executou a instalação e configuração necessárias, da maneira especificada acima.
Lembre-se de use
os modelos de cesta e/ou itens de cesta que você criou, quando necessário.
De qualquer lugar do seu aplicativo, você pode obter a cesta atual. Se nenhuma cesta existir atualmente na sessão, uma será criada.
$ basket = Basket:: getCurrent ();
Se precisar descartar a cesta atual e criar uma nova, como depois que um usuário fez um pedido, você pode usar o método getNew
.
$ basket = Basket:: getNew ();
Este método funciona essencialmente como esvaziar a cesta.
Os métodos estáticos getCurrent
e getNew
armazenam o ID da cesta atual na sessão. Se não quiser isso, você mesmo pode gerenciar as cestas, como faria com qualquer modelo Eloquent.
// Get new basket
$ basket = new Basket ();
// Get current basket
$ userBasketId = Auth:: user ()-> basket_id ;
$ basket = Basket:: find ( $ userBasketId );
Depois de obter a cesta atual, você pode facilmente adicionar itens a ela usando o método add
da cesta. Você precisa fornecer uma quantidade e qualquer modelo cestável.
Opcionalmente, você também pode fornecer uma série de metadados de itens da cesta, que podem ser usados para armazenar informações sobre variações de um produto.
$ quantity = 5 ;
$ product = Product:: FindOrFail ( 1 );
$ basket -> add ( $ quantity , $ product );
$ basket -> add ( $ quantity , $ product , [ ' colour ' => ' red ' , ' size ' => ' medium ' ]);
Retirar os itens da cesta e o modelo cestável que eles contêm pode ser feito facilmente. Veja o exemplo abaixo.
foreach ( $ basket -> items as $ item ) {
$ product = $ item -> basketable ;
echo $ product -> name ;
}
Cada item da cesta possui uma quantidade associada. É definido quando um item é adicionado ao carrinho, mas pode ser modificado posteriormente através do método setQuantity
.
$ item = $ basket -> items -> first ();
$ item -> setQuantity ( $ request -> quantity );
Os itens da cesta podem ser facilmente removidos simplesmente excluindo-os. Veja o exemplo a seguir.
$ item = $ basket -> items -> first ();
$ item -> delete ();
Obter o custo unitário de um item da cesta envolve apenas chamar o método getPrice
do modelo de cesta associado ao item da cesta. Veja o exemplo abaixo.
$ item = $ basket -> items -> first ();
$ item -> basketable -> getPrice ();
A classe de item da cesta fornece um método getPrice
que obtém o total da linha. Este é simplesmente o preço do cesto multiplicado pela quantidade do item do cesto. O código de exemplo abaixo mostra como usar este método.
$ item = $ basket -> items -> first ();
$ item -> getPrice ();
Existe um único método na classe cesta que pode somar todas as quantidades de itens da cesta. Basta chamar o método getTotalNumberOfItems
, conforme a seguir.
$ numItems = $ basket -> getTotalNumberOfItems ();
Um método getSubtotal
é fornecido na classe basket que fornece o total de todos os itens na cesta. Veja o exemplo a seguir.
$ subtotal = $ basket -> getSubtotal ()
Se desejar adicionar custos de entrega ou descontos, você pode criar um novo método getTotal
em sua classe basket. Este método pode chamar o método getSubtotal
e, em seguida, modificá-lo e retorná-lo da maneira que desejar.
Um exemplo de classe Basket implementando essa ideia é mostrado abaixo.
# app/Basket.php
<?php
namespace App ;
use DivineOmega LaravelExtendableBasket Models Basket as BasketModel ;
class Basket extends BasketModel
{
public function items ()
{
return $ this -> hasMany ( ' AppBasketItem ' );
}
public function getTotal ()
{
$ deliveryCost = 3.99 ;
return $ this -> getSubtotal () + $ deliveryCost ;
}
}