diff --git a/app/Config/Constants.php b/app/Config/Constants.php index 99bf708..7d97d9b 100644 --- a/app/Config/Constants.php +++ b/app/Config/Constants.php @@ -161,7 +161,7 @@ define('CATEGORY_ROLE_FIELDS', [ 'WRITE' => 'iswrite', 'REPLY' => 'isreply', 'UPLOAD' => 'isupload', - 'DOWNLOAD' => 'isdownload', + 'DONWLOAD' => 'isdownload', ]); //인증 관련 @@ -183,7 +183,7 @@ define('AUTH_ADAPTERS', [ define('PATHS', [ 'EXCEL' => WRITEPATH . "excel/", 'UPLOAD' => WRITEPATH . "uploads/", - 'UPLOAD_PHOTO' => FCPATH . 'upload_images/', + 'UPLOAD_IMAGE' => FCPATH . 'upload_images/', 'DOWNLOAD' => WRITEPATH . "download/", 'API' => WRITEPATH . "api/", ]); diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 0409b07..bf4af24 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -42,8 +42,8 @@ $routes->get('/logout', 'AuthController::logout'); $routes->group('cli', ['namespace' => 'App\Controllers\CLI'], function ($routes) { }); $routes->group('ecommerce', ['namespace' => 'App\Controllers'], function ($routes) { - $routes->post('/addCart', 'EcommerceController::addCart'); - $routes->get('/cancelCart', 'EcommerceController::cancelCart'); + $routes->post('addCart', 'EcommerceController::addCart'); + $routes->get('cancelCart', 'EcommerceController::cancelCart'); }); // authGuard는 App\Config\Filters.php의 $aliases에 선언한 이름이어야 함 $routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'authFilter:master,director,cloudflare,manager'], static function ($routes) { diff --git a/app/Config/Routes_Shoppinmall.php b/app/Config/Routes_Shoppinmall.php index b4e086d..bf4af24 100644 --- a/app/Config/Routes_Shoppinmall.php +++ b/app/Config/Routes_Shoppinmall.php @@ -42,8 +42,8 @@ $routes->get('/logout', 'AuthController::logout'); $routes->group('cli', ['namespace' => 'App\Controllers\CLI'], function ($routes) { }); $routes->group('ecommerce', ['namespace' => 'App\Controllers'], function ($routes) { - $routes->post('/addCart', 'EcommerceController::addCart'); - $routes->get('/cancelCart', 'EcommerceController::cancelCart'); + $routes->post('addCart', 'EcommerceController::addCart'); + $routes->get('cancelCart', 'EcommerceController::cancelCart'); }); // authGuard는 App\Config\Filters.php의 $aliases에 선언한 이름이어야 함 $routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'authFilter:master,director,cloudflare,manager'], static function ($routes) { @@ -141,7 +141,6 @@ $routes->group('front', ['namespace' => 'App\Controllers\Front'], function ($rou $routes->get('', 'ProductController::index'); $routes->get('excel', 'ProductController::excel/$1'); $routes->get('view/(:uuid)', 'ProductController::view/$1'); - $routes->get('download/(:any)/(:uuid)', 'ProductController::download/$1/$2'); }); $routes->group('order', static function ($routes) { $routes->get('', 'OrderController::index'); diff --git a/app/Controllers/Admin/BoardController.php b/app/Controllers/Admin/BoardController.php index 80eb3c3..86d5791 100644 --- a/app/Controllers/Admin/BoardController.php +++ b/app/Controllers/Admin/BoardController.php @@ -6,11 +6,11 @@ use App\Models\BoardModel; use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\ResponseInterface; use Psr\Log\LoggerInterface; -use App\Controllers\Trait\UploadTrait; +use App\Controllers\Trait\UpDownloadTrait; class BoardController extends AdminController { - use UploadTrait; + use UpDownloadTrait; public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger) { $this->_model = new BoardModel(); diff --git a/app/Controllers/Admin/ProductController.php b/app/Controllers/Admin/ProductController.php index aca946a..3515353 100644 --- a/app/Controllers/Admin/ProductController.php +++ b/app/Controllers/Admin/ProductController.php @@ -6,11 +6,11 @@ use App\Models\ProductModel; use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\ResponseInterface; use Psr\Log\LoggerInterface; -use App\Controllers\Trait\UploadTrait; +use App\Controllers\Trait\UpDownloadTrait; class ProductController extends AdminController { - use UploadTrait; + use UpDownloadTrait; public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger) { $this->_model = new ProductModel(); @@ -20,11 +20,11 @@ class ProductController extends AdminController public function getFields(string $action = ""): array { - $fields = ["category_uid", 'name', "photo", "cost", "price", "sale", "stock", "view_cnt", "status", "content",]; + $fields = ["category_uid", 'name', "photo", "cost", "sale", "stock", "view_cnt", "status", "content",]; switch ($action) { case "index": case "excel": - return ["category_uid", "user_uid", 'name', "photo", "cost", "price", "sale", "stock", "view_cnt", "status", "created_at"]; + return ["category_uid", "user_uid", 'name', "photo", "cost", "sale", "price", "stock", "view_cnt", "status", "created_at"]; break; case "view": return [...$fields, "created_at"]; @@ -55,4 +55,19 @@ class ProductController extends AdminController } return $this->_viewDatas['fieldDatas']; } + + protected function insert_process() + { + if ($this->_viewDatas['fieldDatas']['cost'] < $this->_viewDatas['fieldDatas']['sale']) { + throw new \Exception(sprintf( + "%s가[%s] %s[%s]보다 작습니다.", + lang($this->_model->getClassName() . '.label.cost'), + number_format($this->_viewDatas['fieldDatas']['cost']), + lang($this->_model->getClassName() . '.label.sale'), + number_format($this->_viewDatas['fieldDatas']['sale']), + )); + } + $this->_viewDatas['fieldDatas']['price'] = $this->_viewDatas['fieldDatas']['cost'] - $this->_viewDatas['fieldDatas']['sale']; + return parent::insert_process(); + } } diff --git a/app/Controllers/BaseController.php b/app/Controllers/BaseController.php index d8f95f0..436dbc2 100644 --- a/app/Controllers/BaseController.php +++ b/app/Controllers/BaseController.php @@ -582,11 +582,11 @@ abstract class BaseController extends Controller throw new \Exception("첨부파일이 확인되지 않습니다."); } $entity = $this->download_process($entity); - list($origin_filename, $filename) = explode(DEFAULTS['DELIMITER_FILE'], $entity->$field); - if (is_file(WRITEPATH . PATHS['UPLOAD'] . "/" . $origin_filename)) { - throw new \Exception("파일이 확인되지 않습니다."); + list($filename, $uploaded_filename) = explode(DEFAULTS['DELIMITER_FILE'], $entity->$field); + if (!is_file(PATHS['UPLOAD'] . "/" . $uploaded_filename)) { + throw new \Exception("파일이 확인되지 않습니다.\n" . PATHS['UPLOAD'] . "/" . $uploaded_filename); } - return $this->response->download(WRITEPATH . PATHS['UPLOAD'] . "/" . $filename, null)->setFileName(date("YmdHms") . '_' . $origin_filename); + return $this->response->download(PATHS['UPLOAD'] . "/" . $uploaded_filename, null)->setFileName(date("Ymd") . '_' . $filename); } catch (\Exception $e) { return redirect()->to($this->_session->getFlashdata(SESSION_NAMES['RETURN_URL']) ?: "/")->with('return_message', $e->getMessage()); } diff --git a/app/Controllers/EcommerceController.php b/app/Controllers/EcommerceController.php index 7c83020..99c1755 100644 --- a/app/Controllers/EcommerceController.php +++ b/app/Controllers/EcommerceController.php @@ -89,7 +89,7 @@ class EcommerceController extends Controller throw new \Exception("구매수량이 너무 많습니다.\n구매수량:{$this->_viewDatas['fieldDatas']['quantity']}개, 남은 재고수량:{$product->getStock()}개"); } //구매 금액 비교 - $price = ($product->getPrice() - $product->getSale()) * $this->_viewDatas['fieldDatas']['quantity']; + $price = $product->getPrice() * $this->_viewDatas['fieldDatas']['quantity']; if ($price != $this->_viewDatas['fieldDatas']['price']) { throw new \Exception("실 상품금액{$price} 와 구매금액{$this->_viewDatas['fieldDatas']['price']}이 서로 다릅니다."); } diff --git a/app/Controllers/Front/BoardController.php b/app/Controllers/Front/BoardController.php index 8b0b7f2..a3b02e5 100644 --- a/app/Controllers/Front/BoardController.php +++ b/app/Controllers/Front/BoardController.php @@ -131,7 +131,7 @@ class BoardController extends FrontController public function download_process($entity) { //권한체크 - $this->isRole('download'); - return $entity; + $this->isRole('download', $entity); + return parent::download_process($entity); } } diff --git a/app/Controllers/Front/ProductController.php b/app/Controllers/Front/ProductController.php index 1d2f451..9c78bac 100644 --- a/app/Controllers/Front/ProductController.php +++ b/app/Controllers/Front/ProductController.php @@ -66,7 +66,7 @@ class ProductController extends FrontController public function download_process($entity) { //권한체크 - $this->isRole('download'); - return $entity; + $this->isRole('download', $entity); + return parent::download_process($entity); } } diff --git a/app/Controllers/Trait/UploadTrait.php b/app/Controllers/Trait/UpDownloadTrait.php similarity index 69% rename from app/Controllers/Trait/UploadTrait.php rename to app/Controllers/Trait/UpDownloadTrait.php index f561efb..982265d 100644 --- a/app/Controllers/Trait/UploadTrait.php +++ b/app/Controllers/Trait/UpDownloadTrait.php @@ -4,21 +4,21 @@ namespace App\Controllers\Trait; use CodeIgniter\HTTP\Files\UploadedFile; -trait UploadTrait +trait UpDownloadTrait { //Upload FIle관련 - private function upload_file_process(UploadedFile $upfile): string + private function upDownload_file_process(UploadedFile $upfile): string { - $name = null; $filename = null; + $uploaded_filename = null; if ($upfile->isValid() && !$upfile->hasMoved()) { - $name = $upfile->getName(); - $filename = $upfile->getRandomName(); - $upfile->move(PATHS['UPLOAD'], $filename); - //move시 중복된파일명이 있다면 파일명이 바뀌므로 여기서 한번더 파일명 확인 필요 $filename = $upfile->getName(); + $uploaded_filename = $upfile->getRandomName(); + $upfile->move(PATHS['UPLOAD'], $uploaded_filename); + //move시 중복된파일명이 있다면 파일명이 바뀌므로 여기서 한번더 파일명 확인 필요 + $uploaded_filename = $upfile->getName(); } - return $name . DEFAULTS['DELIMITER_FILE'] . $filename; + return $filename . DEFAULTS['DELIMITER_FILE'] . $uploaded_filename; } public function upload_file_procedure(string $field): string { @@ -39,29 +39,29 @@ trait UploadTrait return $files; } - private function image_resize_process(UploadedFile $upfile, $filename, $x = 25, $y = 25) + private function image_resize_process(UploadedFile $upfile, $uploaded_filename, $x = 25, $y = 25) { $image = \Config\Services::image(); $image->withFile($upfile) ->resize($x, $y, true, 'height') - ->save(PATHS['UPLOAD_PHOTO'] . $filename); + ->save(PATHS['UPLOAD_IMAGE'] . $uploaded_filename); } private function upload_image_process(UploadedFile $upfile): string { //참고:https://www.positronx.io/codeigniter-resize-image-with-image-manipulation-tutorial/ - $name = null; $filename = null; + $uploaded_filename = null; if ($upfile->isValid() && !$upfile->hasMoved()) { - $name = $upfile->getName(); - $filename = $upfile->getRandomName(); - $this->image_resize_process($upfile, "small_" . $filename); - $this->image_resize_process($upfile, "middle_" . $filename, 50, 50); - $this->image_resize_process($upfile, "large_" . $filename, 100, 100); - $upfile->move(PATHS['UPLOAD_PHOTO'], $filename); - //move시 중복된파일명이 있다면 파일명이 바뀌므로 여기서 한번더 파일명 확인 필요 $filename = $upfile->getName(); + $uploaded_filename = $upfile->getRandomName(); + $this->image_resize_process($upfile, "small_" . $uploaded_filename); + $this->image_resize_process($upfile, "middle_" . $uploaded_filename, 50, 50); + $this->image_resize_process($upfile, "large_" . $uploaded_filename, 100, 100); + $upfile->move(PATHS['UPLOAD_IMAGE'], $uploaded_filename); + //move시 중복된파일명이 있다면 파일명이 바뀌므로 여기서 한번더 파일명 확인 필요 + $uploaded_filename = $upfile->getName(); } - return $name . DEFAULTS['DELIMITER_FILE'] . $filename; + return $filename . DEFAULTS['DELIMITER_FILE'] . $uploaded_filename; } public function upload_image_procedure(string $field): string @@ -72,7 +72,7 @@ trait UploadTrait { //Multiple파일의경우 html에서는 필드명[]를 넣어야하며 //rule에서 "uploaded[필드명.0]|is_image[필드명]~~" 이런식으로 넣어야함 - $names = array(); + $filenames = array(); if ($upfiles = $this->request->getFiles()) { foreach ($upfiles[$field] as $upfile) { if ($upfile->isValid() && !$upfile->hasMoved()) { @@ -80,6 +80,6 @@ trait UploadTrait } } } - return $names; + return $filenames; } } diff --git a/app/Entities/BoardEntity.php b/app/Entities/BoardEntity.php index 4dd4f26..a459f73 100644 --- a/app/Entities/BoardEntity.php +++ b/app/Entities/BoardEntity.php @@ -39,4 +39,12 @@ class BoardEntity extends BaseHierarchyEntity { return $this->attributes['view_cnt']; } + public function getBoardFile() + { + return $this->attributes['board_file']; + } + public function getBoardFileName() + { + return explode(DEFAULTS['DELIMITER_FILE'], $this->getBoardFile())[1]; + } } diff --git a/app/Entities/CategoryEntity.php b/app/Entities/CategoryEntity.php index 3941df8..8f92b43 100644 --- a/app/Entities/CategoryEntity.php +++ b/app/Entities/CategoryEntity.php @@ -2,6 +2,8 @@ namespace App\Entities; +use App\Entities\Trait\HierarchyTrait; + class CategoryEntity extends BaseHierarchyEntity { protected $datamap = []; diff --git a/app/Entities/ProductEntity.php b/app/Entities/ProductEntity.php index b667f59..9fef019 100644 --- a/app/Entities/ProductEntity.php +++ b/app/Entities/ProductEntity.php @@ -49,9 +49,8 @@ class ProductEntity extends BaseEntity } public function getPhotoFileName($size = 'small') { - return $size . '_' . explode(DEFAULTS['DELIMITER_FILE'], $this->attributes['photo'])[1]; + return $size . '_' . explode(DEFAULTS['DELIMITER_FILE'], $this->getPhoto())[1]; } - public function getContent() { return $this->attributes['content']; diff --git a/app/Helpers/Board_helper.php b/app/Helpers/Board_helper.php index 5e46a53..b0abf09 100644 --- a/app/Helpers/Board_helper.php +++ b/app/Helpers/Board_helper.php @@ -64,13 +64,14 @@ function getFieldView_BoardHelper($field, $entity, array $viewDatas) $value = $entity->$field ?: DEFAULTS['EMPTY']; switch ($field) { case 'category_uid': - $categorys = array(); - foreach (array_values($viewDatas['fieldFormOptions'][$field]) as $category_2depth) { - foreach ($category_2depth as $key => $label) { - $categorys[$key] = $label; + foreach (array_values($viewDatas['fieldFormOptions'][$field]) as $category_2depths) { + foreach ($category_2depths as $key => $label) { + if ($key == $value) { + return $label; + } } } - return $categorys[$value]; + return $value; break; case 'title': case 'name': diff --git a/app/Helpers/Product_helper.php b/app/Helpers/Product_helper.php index b6923c5..f2e4752 100644 --- a/app/Helpers/Product_helper.php +++ b/app/Helpers/Product_helper.php @@ -69,6 +69,16 @@ function getFieldView_ProductHelper($field, $entity, array $viewDatas) { $value = $entity->$field ?: DEFAULTS['EMPTY']; switch ($field) { + case 'category_uid': + foreach (array_values($viewDatas['fieldFormOptions'][$field]) as $category_2depths) { + foreach ($category_2depths as $key => $label) { + if ($key == $value) { + return $label; + } + } + } + return $value; + break; case 'title': case 'name': return anchor( diff --git a/app/Models/BoardModel.php b/app/Models/BoardModel.php index cbf1cc6..a3164fb 100644 --- a/app/Models/BoardModel.php +++ b/app/Models/BoardModel.php @@ -39,7 +39,7 @@ class BoardModel extends BaseHierarchyModel $rules[$field] = "required|string"; break; case "board_file": //uploaded[{$field}] == requried와 같은의미 - $rules[$field] = !$action ? "if_exist|string" : "is_image[{$field}]|mime_in[{$field},image/jpg,image/jpeg,image/gif,image/png,image/webp]|max_size[{$field},100]|max_dims[{$field},1024,768]"; + $rules[$field] = "if_exist|string"; break; case "view_cnt": $rules[$field] = "if_exist|numeric"; diff --git a/app/Models/ProductModel.php b/app/Models/ProductModel.php index b5b51ff..2a6848c 100644 --- a/app/Models/ProductModel.php +++ b/app/Models/ProductModel.php @@ -41,15 +41,13 @@ class ProductModel extends BaseModel $rules[$field] = "required|trim|string"; break; case 'photo': - $rules[$field] = !$action ? "if_exist|string" : "is_image[{$field}]|mime_in[{$field},image/jpg,image/jpeg,image/gif,image/png,image/webp]|max_size[{$field},100]|max_dims[{$field},1024,768]"; + $rules[$field] = !$action ? "if_exist|string" : "uploaded[$field]|is_image[{$field}]|mime_in[{$field},image/jpg,image/jpeg,image/gif,image/png,image/webp]|max_size[{$field},100]|max_dims[{$field},1024,768]"; break; case 'cost': case 'price': - $rules[$field] = "required|numeric"; - break; case 'sale': case 'stock': - $rules[$field] = "if_exist|numeric"; + $rules[$field] = "required|numeric"; break; case "content": $rules[$field] = "required|string"; diff --git a/app/Views/admin/board/insert.php b/app/Views/admin/board/insert.php index 3f6857e..aa4f729 100644 --- a/app/Views/admin/board/insert.php +++ b/app/Views/admin/board/insert.php @@ -16,6 +16,6 @@ "btn btn-outline btn-primary")); ?> + - endSection() ?> \ No newline at end of file diff --git a/app/Views/admin/board/reply.php b/app/Views/admin/board/reply.php index 9f7367c..a1fd37c 100644 --- a/app/Views/admin/board/reply.php +++ b/app/Views/admin/board/reply.php @@ -16,6 +16,6 @@ "btn btn-outline btn-primary")); ?> + - endSection() ?> \ No newline at end of file diff --git a/app/Views/admin/board/update.php b/app/Views/admin/board/update.php index 9f7367c..a1fd37c 100644 --- a/app/Views/admin/board/update.php +++ b/app/Views/admin/board/update.php @@ -16,6 +16,6 @@ "btn btn-outline btn-primary")); ?> + - endSection() ?> \ No newline at end of file diff --git a/app/Views/admin/category/insert.php b/app/Views/admin/category/insert.php index d33f387..7ecc181 100644 --- a/app/Views/admin/category/insert.php +++ b/app/Views/admin/category/insert.php @@ -16,6 +16,6 @@ "btn btn-outline btn-primary")); ?> + - endSection() ?> \ No newline at end of file diff --git a/app/Views/admin/category/reply.php b/app/Views/admin/category/reply.php index 0a4f0fd..fa34d5a 100644 --- a/app/Views/admin/category/reply.php +++ b/app/Views/admin/category/reply.php @@ -16,6 +16,6 @@ "btn btn-outline btn-primary")); ?> + - endSection() ?> \ No newline at end of file diff --git a/app/Views/admin/category/update.php b/app/Views/admin/category/update.php index 0a4f0fd..fa34d5a 100644 --- a/app/Views/admin/category/update.php +++ b/app/Views/admin/category/update.php @@ -16,6 +16,6 @@ "btn btn-outline btn-primary")); ?> + - endSection() ?> \ No newline at end of file diff --git a/app/Views/admin/product/insert.php b/app/Views/admin/product/insert.php index 92dd634..9d78fdc 100644 --- a/app/Views/admin/product/insert.php +++ b/app/Views/admin/product/insert.php @@ -16,6 +16,6 @@ "btn btn-outline btn-primary")); ?> + - endSection() ?> \ No newline at end of file diff --git a/app/Views/admin/product/update.php b/app/Views/admin/product/update.php index dc11a74..aae2c9a 100644 --- a/app/Views/admin/product/update.php +++ b/app/Views/admin/product/update.php @@ -16,6 +16,6 @@ "btn btn-outline btn-primary")); ?> + - endSection() ?> \ No newline at end of file diff --git a/app/Views/admin/user/insert.php b/app/Views/admin/user/insert.php index 3074c50..9e7d34f 100644 --- a/app/Views/admin/user/insert.php +++ b/app/Views/admin/user/insert.php @@ -16,6 +16,6 @@ "btn btn-outline btn-primary")); ?> + - endSection() ?> \ No newline at end of file diff --git a/app/Views/admin/user/update.php b/app/Views/admin/user/update.php index 62b90d4..8ae37e6 100644 --- a/app/Views/admin/user/update.php +++ b/app/Views/admin/user/update.php @@ -16,6 +16,6 @@ "btn btn-outline btn-primary")); ?> + - endSection() ?> \ No newline at end of file diff --git a/app/Views/front/board/insert.php b/app/Views/front/board/insert.php index c0ab506..682524b 100644 --- a/app/Views/front/board/insert.php +++ b/app/Views/front/board/insert.php @@ -1,4 +1,4 @@ -extend('layouts/admin') ?> +extend('layouts/front') ?> section('content') ?>
getHead()) ?>
diff --git a/app/Views/front/board/reply.php b/app/Views/front/board/reply.php index 9886faf..6edfa6d 100644 --- a/app/Views/front/board/reply.php +++ b/app/Views/front/board/reply.php @@ -1,4 +1,4 @@ -extend('layouts/admin') ?> +extend('layouts/front') ?> section('content') ?>
getHead()) ?>
diff --git a/app/Views/front/board/update.php b/app/Views/front/board/update.php index 9886faf..6edfa6d 100644 --- a/app/Views/front/board/update.php +++ b/app/Views/front/board/update.php @@ -1,4 +1,4 @@ -extend('layouts/admin') ?> +extend('layouts/front') ?> section('content') ?>
getHead()) ?>
diff --git a/app/Views/front/board/view.php b/app/Views/front/board/view.php index 7676c61..2359541 100644 --- a/app/Views/front/board/view.php +++ b/app/Views/front/board/view.php @@ -1,4 +1,4 @@ -extend('layouts/admin') ?> +extend('layouts/front') ?> section('content') ?>
getHead()) ?>
diff --git a/app/Views/front/order/view.php b/app/Views/front/order/view.php index b3ae6fb..2063aec 100644 --- a/app/Views/front/order/view.php +++ b/app/Views/front/order/view.php @@ -1,4 +1,4 @@ -extend('layouts/admin') ?> +extend('layouts/front') ?> section('content') ?>
diff --git a/app/Views/front/product/view.php b/app/Views/front/product/view.php index d0ad97f..00d4d03 100644 --- a/app/Views/front/product/view.php +++ b/app/Views/front/product/view.php @@ -1,4 +1,4 @@ -extend('layouts/admin') ?> +extend('layouts/front') ?> section('content') ?>
getHead()) ?>
diff --git a/app/Views/front/user/update.php b/app/Views/front/user/update.php index 62b90d4..0878132 100644 --- a/app/Views/front/user/update.php +++ b/app/Views/front/user/update.php @@ -1,4 +1,4 @@ -extend('layouts/admin') ?> +extend('layouts/front') ?> section('content') ?>
@@ -16,6 +16,6 @@
"btn btn-outline btn-primary")); ?>
+
- endSection() ?> \ No newline at end of file diff --git a/app/Views/front/user/view.php b/app/Views/front/user/view.php index 32e5ef6..0ce7ff0 100644 --- a/app/Views/front/user/view.php +++ b/app/Views/front/user/view.php @@ -1,4 +1,4 @@ -extend('layouts/admin') ?> +extend('layouts/front') ?> section('content') ?>