shoppingmallv2 init...
This commit is contained in:
parent
27d55ec628
commit
8260c76739
@ -36,22 +36,22 @@ abstract class BaseBackend
|
|||||||
return $this->_model->getTitleField();
|
return $this->_model->getTitleField();
|
||||||
}
|
}
|
||||||
//Form Fields
|
//Form Fields
|
||||||
public function getFields(string $action)
|
public function getFields(string $action): array
|
||||||
{
|
{
|
||||||
return $this->_model->getFields($action);
|
return $this->_model->getFields($action);
|
||||||
}
|
}
|
||||||
//Field별 Form Rule용
|
//Field별 Form Rule용
|
||||||
public function getFieldRules(array $fields, string $action)
|
public function getFieldRules(array $fields, string $action): array
|
||||||
{
|
{
|
||||||
return $this->_model->getFieldRules($fields, $action);
|
return $this->_model->getFieldRules($fields, $action);
|
||||||
}
|
}
|
||||||
//Field별 Form Filter용
|
//Field별 Form Filter용
|
||||||
public function getFieldFilters()
|
public function getFieldFilters(): array
|
||||||
{
|
{
|
||||||
return $this->_model->getFieldFilters();
|
return $this->_model->getFieldFilters();
|
||||||
}
|
}
|
||||||
//Field별 Form BatchFilter용
|
//Field별 Form BatchFilter용
|
||||||
public function getFieldBatchFilters()
|
public function getFieldBatchFilters(): array
|
||||||
{
|
{
|
||||||
return $this->_model->getFieldBatchFilters();
|
return $this->_model->getFieldBatchFilters();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,13 +2,16 @@
|
|||||||
|
|
||||||
namespace App\Backend;
|
namespace App\Backend;
|
||||||
|
|
||||||
|
use App\Models\OrderModel;
|
||||||
|
use App\Models\ProductModel;
|
||||||
|
|
||||||
class EcommerceBackend extends BaseBackend
|
class EcommerceBackend extends BaseBackend
|
||||||
{
|
{
|
||||||
private $_product = null;
|
private $_product = null;
|
||||||
private $_order = null;
|
private $_order = null;
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
parent::__construct('Order');
|
parent::__construct('Ecommerce');
|
||||||
$this->_product = new ProductBackend();
|
$this->_product = new ProductBackend();
|
||||||
$this->_order = new OrderBackend();
|
$this->_order = new OrderBackend();
|
||||||
}
|
}
|
||||||
@ -22,71 +25,39 @@ class EcommerceBackend extends BaseBackend
|
|||||||
$this->_product;
|
$this->_product;
|
||||||
}
|
}
|
||||||
|
|
||||||
//초기선언부--------
|
|
||||||
//Title Field
|
|
||||||
public function getTitleField()
|
|
||||||
{
|
|
||||||
return "product_uid";
|
|
||||||
}
|
|
||||||
//Form Fields
|
//Form Fields
|
||||||
public function getFields(string $action = ""): array
|
public function getFields(string $action): array
|
||||||
{
|
{
|
||||||
$fields = ['product_uid', "quantity", "price"];
|
return ["product_uid", "quantity", "price", "status"];
|
||||||
switch ($action) {
|
|
||||||
default:
|
|
||||||
return $fields;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
public function getFieldFilters(): array
|
//Field별 Form Rule용
|
||||||
{
|
public function getFieldRules(array $fields, string $action): array
|
||||||
return ['product_uid', "user_uid"];
|
|
||||||
}
|
|
||||||
public function getFieldBatchFilters(): array
|
|
||||||
{
|
|
||||||
return ["status"];
|
|
||||||
}
|
|
||||||
public function getFieldRule(string $field, array $rules, string $action = ""): array
|
|
||||||
{
|
|
||||||
switch ($field) {
|
|
||||||
case $this->getTitleField():
|
|
||||||
case "product_uid":
|
|
||||||
$rules[$field] = "required|regex_match[/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/]";
|
|
||||||
break;
|
|
||||||
case 'quantity':
|
|
||||||
case 'price':
|
|
||||||
$rules[$field] = "required|numeric";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new \Exception(__FUNCTION__ . "에서 오류발생: Field명:{$field}는 사용할수없습니다.");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return $rules;
|
|
||||||
}
|
|
||||||
public function getFieldRules(array $fields, string $action)
|
|
||||||
{
|
{
|
||||||
$rules = array();
|
$rules = array();
|
||||||
foreach ($fields as $field) {
|
foreach ($fields as $field) {
|
||||||
$rules = $this->getFieldRule($field, $rules, $action);
|
switch ($field) {
|
||||||
|
case "product_uid":
|
||||||
|
$rules[$field] = "required|regex_match[/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/]";
|
||||||
|
break;
|
||||||
|
case "sess_id":
|
||||||
|
$rules[$field] = "required|string";
|
||||||
|
break;
|
||||||
|
case 'quantity':
|
||||||
|
case 'price':
|
||||||
|
$rules[$field] = "required|numeric";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return $rules;
|
return $rules;
|
||||||
}
|
}
|
||||||
//Entity값 가져오기
|
|
||||||
public function getEntity($uid)
|
|
||||||
{
|
|
||||||
throw new \Exception(__FUNCTION__ . "에서 오류발생: 사용할수없습니다.");
|
|
||||||
}
|
|
||||||
public function getEntitys($condition)
|
|
||||||
{
|
|
||||||
throw new \Exception(__FUNCTION__ . "에서 오류발생: 사용할수없습니다.");
|
|
||||||
}
|
|
||||||
//-------초기선언부
|
|
||||||
|
|
||||||
//장바구니에 담기
|
//장바구니에 담기
|
||||||
public function addCart(string $product_uid, int $quantity, int $price)
|
public function addCart(array $fieldDatas)
|
||||||
{
|
{
|
||||||
$product = $this->_product->getEntity($product_uid);
|
$product = $this->_product->getEntity($fieldDatas['product_uid']);
|
||||||
$this->_product->addCart($product, $quantity, $price);
|
$this->_product->addCart($product, $fieldDatas['quantity'], $fieldDatas['price']);
|
||||||
$this->_order->addCart($product, $quantity, $price);
|
$this->_order->addCart($product, $fieldDatas['quantity'], $fieldDatas['price']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -129,7 +129,6 @@ $routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'au
|
|||||||
$routes->group('ecommerce', static function ($routes) {
|
$routes->group('ecommerce', static function ($routes) {
|
||||||
$routes->get('', 'EcommerceController::index');
|
$routes->get('', 'EcommerceController::index');
|
||||||
$routes->post('addcart', 'EcommerceController::addCart');
|
$routes->post('addcart', 'EcommerceController::addCart');
|
||||||
$routes->get('view/(:uuid)', 'EcommerceController::viewCart/$1');
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
$routes->group('front', ['namespace' => 'App\Controllers\Front'], function ($routes) {
|
$routes->group('front', ['namespace' => 'App\Controllers\Front'], function ($routes) {
|
||||||
|
|||||||
@ -16,18 +16,31 @@ class EcommerceController extends AdminController
|
|||||||
$this->_viewPath .= strtolower($this->_backend->getClassName());
|
$this->_viewPath .= strtolower($this->_backend->getClassName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function addCart_process()
|
||||||
|
{
|
||||||
|
//fieldData Rule 검사
|
||||||
|
if (!$this->validate($this->_viewDatas['fieldRules'])) {
|
||||||
|
throw new \Exception("장비구니 검증 오류발생\n" . implode("\n", $this->validator->getErrors()));
|
||||||
|
}
|
||||||
|
//fieldData 적용
|
||||||
|
$this->_viewDatas['fieldDatas'] = array();
|
||||||
|
foreach ($this->_viewDatas['fields'] as $field) {
|
||||||
|
$this->_viewDatas['fieldDatas'] = $this->getFieldFormData($field);
|
||||||
|
}
|
||||||
|
}
|
||||||
//장바구니에 담기
|
//장바구니에 담기
|
||||||
public function addCart()
|
public function addCart()
|
||||||
{
|
{
|
||||||
$msg = "";
|
$msg = "";
|
||||||
try {
|
try {
|
||||||
$this->_viewDatas = $this->init(__FUNCTION__);
|
$this->_viewDatas['fields'] = $this->_backend->getFields(__FUNCTION__);
|
||||||
|
$this->_viewDatas['fieldRules'] = $this->_backend->getFieldRules($this->_viewDatas['fields'], __FUNCTION__);
|
||||||
//Transaction 시작
|
//Transaction 시작
|
||||||
$this->_backend->transStart();
|
// $this->_backend->transStart();
|
||||||
$this->insert_process();
|
$this->addCart_process();
|
||||||
$this->_backend->addCart($this->_viewDatas['fieldDatas']);
|
$this->_backend->addCart($this->_viewDatas['fieldDatas']);
|
||||||
//Transaction Commit
|
//Transaction Commit
|
||||||
$this->_backend->transCommit();
|
// $this->_backend->transCommit();
|
||||||
$msg = sprintf(
|
$msg = sprintf(
|
||||||
"%s에서 해당 상품 %s개를 장바구니에 담았습니다.",
|
"%s에서 해당 상품 %s개를 장바구니에 담았습니다.",
|
||||||
$this->_viewDatas['title'],
|
$this->_viewDatas['title'],
|
||||||
@ -35,7 +48,7 @@ class EcommerceController extends AdminController
|
|||||||
);
|
);
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
//Transaction Rollback
|
//Transaction Rollback
|
||||||
$this->_backend->transRollback();
|
// $this->_backend->transRollback();
|
||||||
$msg = sprintf(
|
$msg = sprintf(
|
||||||
"%s에서 다음 오류로 인해 장바구니에 담기를 실패하였습니다.\n%s",
|
"%s에서 다음 오류로 인해 장바구니에 담기를 실패하였습니다.\n%s",
|
||||||
$this->_viewDatas['title'],
|
$this->_viewDatas['title'],
|
||||||
@ -48,40 +61,4 @@ class EcommerceController extends AdminController
|
|||||||
return redirect()->to($this->_session->getFlashdata(SESSION_NAMES['RETURN_URL']));
|
return redirect()->to($this->_session->getFlashdata(SESSION_NAMES['RETURN_URL']));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//View관련
|
|
||||||
public function viewCart($order_uid)
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
$this->_viewDatas = $this->init(__FUNCTION__);
|
|
||||||
helper(['form']);
|
|
||||||
$this->_viewDatas['forms'] = ['attributes' => ['method' => "post",], 'hiddens' => []];
|
|
||||||
$this->_viewDatas['order'] = $this->_backend->getOrderBackend()->getEntity($order_uid);
|
|
||||||
$this->_viewDatas['product'] = $this->_backend->getProductBackend()->getEntity($this->_viewDatas['order']->getProduct_uid());
|
|
||||||
$this->_session->keepFlashdata(SESSION_NAMES['RETURN_URL']);
|
|
||||||
return view($this->_viewPath . '/view', $this->_viewDatas);
|
|
||||||
} catch (\Exception $e) {
|
|
||||||
return redirect()->to($this->_session->getFlashdata(SESSION_NAMES['RETURN_URL']))->with('return_message', $e->getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function index()
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
$this->_viewDatas = $this->init(__FUNCTION__);
|
|
||||||
helper(['form']);
|
|
||||||
$this->_viewDatas['forms'] = ['attributes' => ['method' => "post",], 'hiddens' => []];
|
|
||||||
foreach ($this->_viewDatas['fieldFilters'] as $field) {
|
|
||||||
$this->_viewDatas[$field] = $this->request->getVar($field) ?: DEFAULTS['EMPTY'];
|
|
||||||
}
|
|
||||||
//모델 처리
|
|
||||||
$this->_viewDatas['entitys'] = $this->_backend->getOrderBackend()->getEntitys(['status' => DEFAULTS['STATUS']]);
|
|
||||||
// log_message("debug", __METHOD__ . "에서 호출:" . $this->_backend->getLastQuery());
|
|
||||||
//setting return_url to session flashdata
|
|
||||||
$this->_session->setFlashdata(SESSION_NAMES['RETURN_URL'], current_url() . '?' . $this->request->getUri()->getQuery() ?: "");
|
|
||||||
return view($this->_viewPath . '/index', $this->_viewDatas);
|
|
||||||
} catch (\Exception $e) {
|
|
||||||
return redirect()->back()->with('return_message', $e->getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,59 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Controllers\Front;
|
|
||||||
|
|
||||||
use CodeIgniter\HTTP\RequestInterface;
|
|
||||||
use CodeIgniter\HTTP\ResponseInterface;
|
|
||||||
use Psr\Log\LoggerInterface;
|
|
||||||
|
|
||||||
class EcommerceController extends FrontController
|
|
||||||
{
|
|
||||||
|
|
||||||
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
|
|
||||||
{
|
|
||||||
$this->_backend = service('ecommerce');
|
|
||||||
parent::initController($request, $response, $logger);
|
|
||||||
$this->_viewPath .= strtolower($this->_backend->getClassName());
|
|
||||||
}
|
|
||||||
|
|
||||||
//장바구니에 담기
|
|
||||||
public function addCart()
|
|
||||||
{
|
|
||||||
$msg = "";
|
|
||||||
try {
|
|
||||||
$this->_viewDatas = $this->init(__FUNCTION__);
|
|
||||||
//Transaction 시작
|
|
||||||
$this->_backend->transStart();
|
|
||||||
$this->insert_process();
|
|
||||||
$this->_backend->addCart($this->_viewDatas['fieldDatas']);
|
|
||||||
//Transaction Commit
|
|
||||||
$this->_backend->transCommit();
|
|
||||||
$msg = sprintf(
|
|
||||||
"%s에서 해당 상품 %s개를 장바구니에 담았습니다.",
|
|
||||||
$this->_viewDatas['title'],
|
|
||||||
$this->_viewDatas['fieldDatas']['quantity']
|
|
||||||
);
|
|
||||||
} catch (\Exception $e) {
|
|
||||||
//Transaction Rollback
|
|
||||||
$this->_backend->transRollback();
|
|
||||||
$msg = sprintf(
|
|
||||||
"%s에서 다음 오류로 인해 장바구니에 담기를 실패하였습니다.\n%s",
|
|
||||||
$this->_viewDatas['title'],
|
|
||||||
$e->getMessage()
|
|
||||||
);
|
|
||||||
log_message("error", $e->getMessage());
|
|
||||||
log_message("error", var_export($this->_viewDatas['fieldDatas'], true));
|
|
||||||
} finally {
|
|
||||||
$this->_session->setFlashdata("return_message", $msg);
|
|
||||||
return redirect()->to($this->_session->getFlashdata(SESSION_NAMES['RETURN_URL']));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//View관련
|
|
||||||
protected function view_process($entity)
|
|
||||||
{
|
|
||||||
$this->_viewDatas['user'] = $this->_backend->getUserModel()->getEntity([$this->_backend->getUserModel()->getPrimaryKey() => $entity->getUser_uid()]);
|
|
||||||
$this->_viewDatas['product'] = $this->_backend->getProductModel()->getEntity([$this->_backend->getProductModel()->getPrimaryKey() => $entity->getProduct_uid()]);
|
|
||||||
return parent::view_process($entity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
return [
|
return [
|
||||||
'title' => "장바구니 정보",
|
'title' => "주문 정보",
|
||||||
'label' => [
|
'label' => [
|
||||||
'uid' => "번호",
|
'uid' => "번호",
|
||||||
'product_uid' => "상품정보",
|
'product_uid' => "상품정보",
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
<?= form_open("admin/ecommerce/addcart/" . $entity->getPrimaryKey(), ['method' => 'post']) ?>
|
<?= form_open("admin/ecommerce/addcart", ['method' => 'post']) ?>
|
||||||
<?= form_hidden("product_uid", $entity->getPrimaryKey()) ?>
|
<?= form_hidden("product_uid", $entity->getPrimaryKey()) ?>
|
||||||
<?= form_hidden("price", $entity->getPrice() - $entity->getSale()) ?>
|
<?= form_hidden("price", $entity->getPrice() - $entity->getSale()) ?>
|
||||||
구매 수량 : <?= getFieldForm_ProductHelper('quantity', 1, $fieldFormOptions) ?>
|
구매 수량 : <?= getFieldForm_ProductHelper('quantity', 1, $fieldFormOptions) ?>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user