From 4c1efb97f69bdcbd0cab3b3413ca888b63cbddf1 Mon Sep 17 00:00:00 2001
From: DewanaGustavus <76590469+DewanaGustavus@users.noreply.github.com>
Date: Thu, 19 Oct 2023 18:19:20 +0700
Subject: [PATCH] refactor: make controller render DRY

---
 src/controller/Controller.php                    | 11 +++++++++++
 src/controller/cart/CartController.php           | 11 +----------
 src/controller/category/CategoryController.php   |  9 +--------
 src/controller/home/HomeController.php           |  9 +--------
 src/controller/home/NotFoundController.php       |  9 +--------
 src/controller/login/LoginController.php         |  9 +--------
 src/controller/login/LogoutController.php        |  9 +--------
 src/controller/login/RegisterController.php      |  9 +--------
 src/controller/product/AddProductController.php  | 10 +---------
 src/controller/product/EditProductController.php |  9 +--------
 src/controller/product/ProductController.php     |  9 +--------
 src/controller/profile/EditProfileController.php |  9 +--------
 src/controller/profile/ProfileController.php     |  9 +--------
 13 files changed, 23 insertions(+), 99 deletions(-)

diff --git a/src/controller/Controller.php b/src/controller/Controller.php
index a90d2d9..199b876 100644
--- a/src/controller/Controller.php
+++ b/src/controller/Controller.php
@@ -20,4 +20,15 @@ class Controller{
         require_once __DIR__. "/../models/$model.php";
         return new $model();
     }
+
+    protected function render($data = []) {
+        require __DIR__ . '/../views/Routes.php';
+        $className = static::class;
+        $fileName = str_replace('Controller', '', $className);
+        $folderName = $routes[$fileName];
+
+        $view = $this->view($folderName, $fileName, $data);
+
+        $view->render();
+    }
 }
\ No newline at end of file
diff --git a/src/controller/cart/CartController.php b/src/controller/cart/CartController.php
index ab3c256..7f395f3 100644
--- a/src/controller/cart/CartController.php
+++ b/src/controller/cart/CartController.php
@@ -40,15 +40,6 @@ class CartController extends Controller {
             "productFileModel" => $productFileModel
         ];
 
-        $dir = __DIR__;
-        $dir = explode("/", $dir);
-        $folderName = end($dir);
-        $className = get_class();
-        $fileName = str_replace('Controller', '', $className);
-        $view = $this->view($folderName, $fileName, $data);
-
-        $view->render();
+        $this->render($data);
     }
-
-    
 }
diff --git a/src/controller/category/CategoryController.php b/src/controller/category/CategoryController.php
index 7ce39dd..2fe9dbc 100644
--- a/src/controller/category/CategoryController.php
+++ b/src/controller/category/CategoryController.php
@@ -21,13 +21,6 @@ class CategoryController extends Controller{
             "pageLimit" => $this->pageLimit
         ];
 
-        $dir = __DIR__;
-        $dir = explode("/", $dir);
-        $folderName = end($dir);
-        $className = get_class();
-        $fileName = str_replace('Controller', '', $className);
-        $view = $this->view($folderName, $fileName, $data);
-
-        $view->render();
+        $this->render($data);
     }
 }
\ No newline at end of file
diff --git a/src/controller/home/HomeController.php b/src/controller/home/HomeController.php
index cf7df83..f68fb0e 100644
--- a/src/controller/home/HomeController.php
+++ b/src/controller/home/HomeController.php
@@ -59,13 +59,6 @@ class HomeController extends Controller{
             "max-price" => $maxPrice
         ];
 
-        $dir = __DIR__;
-        $dir = explode("/", $dir);
-        $folderName = end($dir);
-        $className = get_class();
-        $fileName = str_replace('Controller', '', $className);
-        $view = $this->view($folderName, $fileName, $data);
-
-        $view->render();
+        $this->render($data);
     }
 }
\ No newline at end of file
diff --git a/src/controller/home/NotFoundController.php b/src/controller/home/NotFoundController.php
index eeb4b0a..bf4a3a2 100644
--- a/src/controller/home/NotFoundController.php
+++ b/src/controller/home/NotFoundController.php
@@ -2,13 +2,6 @@
 
 class NotFoundController extends Controller{
     public function index() {
-        $dir = __DIR__;
-        $dir = explode("/", $dir);
-        $folderName = end($dir);
-        $className = get_class();
-        $fileName = str_replace('Controller', '', $className);
-        $view = $this->view($folderName, $fileName);
-
-        $view->render();
+        $this->render();
     }
 }
\ No newline at end of file
diff --git a/src/controller/login/LoginController.php b/src/controller/login/LoginController.php
index a97677a..3e1a259 100644
--- a/src/controller/login/LoginController.php
+++ b/src/controller/login/LoginController.php
@@ -7,14 +7,7 @@ class LoginController extends Controller{
             exit();
         }
         
-        $dir = __DIR__;
-        $dir = explode("/", $dir);
-        $folderName = end($dir);
-        $className = get_class();
-        $fileName = str_replace('Controller', '', $className);
-        $view = $this->view($folderName, $fileName);
-
-        $view->render();
+        $this->render();
     }
 
     public function post() {
diff --git a/src/controller/login/LogoutController.php b/src/controller/login/LogoutController.php
index cc4b9b4..f758634 100644
--- a/src/controller/login/LogoutController.php
+++ b/src/controller/login/LogoutController.php
@@ -6,13 +6,6 @@ class LogoutController extends Controller{
             throw new Exception("You are not allowed to view this page", 405);
         }
         
-        $dir = __DIR__;
-        $dir = explode("/", $dir);
-        $folderName = end($dir);
-        $className = get_class();
-        $fileName = str_replace('Controller', '', $className);
-        $view = $this->view($folderName, $fileName);
-
-        $view->render();
+        $this->render();
     }
 }
\ No newline at end of file
diff --git a/src/controller/login/RegisterController.php b/src/controller/login/RegisterController.php
index 864670e..1337379 100644
--- a/src/controller/login/RegisterController.php
+++ b/src/controller/login/RegisterController.php
@@ -7,14 +7,7 @@ class RegisterController extends Controller{
             exit();
         }
 
-        $dir = __DIR__;
-        $dir = explode("/", $dir);
-        $folderName = end($dir);
-        $className = get_class();
-        $fileName = str_replace('Controller', '', $className);
-        $view = $this->view($folderName, $fileName);
-
-        $view->render();
+        $this->render();
     }
 
     public function post() {
diff --git a/src/controller/product/AddProductController.php b/src/controller/product/AddProductController.php
index baed08c..1051a5f 100644
--- a/src/controller/product/AddProductController.php
+++ b/src/controller/product/AddProductController.php
@@ -13,15 +13,7 @@ class AddProductController extends Controller{
 
         $data = $categoryModel->getCategory()->fetch_all();
 
-        // print_r($data);
-        $dir = __DIR__;
-        $dir = explode("/", $dir);
-        $folderName = end($dir);
-        $className = get_class();
-        $fileName = str_replace('Controller', '', $className);
-        $view = $this->view($folderName, $fileName, $data);
-
-        $view->render();
+        $this->render($data);
     }
 
     public function post(){
diff --git a/src/controller/product/EditProductController.php b/src/controller/product/EditProductController.php
index ef81937..d032d4f 100644
--- a/src/controller/product/EditProductController.php
+++ b/src/controller/product/EditProductController.php
@@ -28,14 +28,7 @@ class EditProductController extends Controller{
             'productFile' => $product_file
         ];
 
-        $dir = __DIR__;
-        $dir = explode("/", $dir);
-        $folderName = end($dir);
-        $className = get_class();
-        $fileName = str_replace('Controller', '', $className);
-        $view = $this->view($folderName, $fileName, $data);
-
-        $view->render();
+        $this->render($data);
     }
 
     public function post($id){
diff --git a/src/controller/product/ProductController.php b/src/controller/product/ProductController.php
index 748453e..3454b17 100644
--- a/src/controller/product/ProductController.php
+++ b/src/controller/product/ProductController.php
@@ -24,13 +24,6 @@ class ProductController extends Controller{
             'productFile' => $productFile
         ];
 
-        $dir = __DIR__;
-        $dir = explode("/", $dir);
-        $folderName = end($dir);
-        $className = get_class();
-        $fileName = str_replace('Controller', '', $className);
-        $view = $this->view($folderName, $fileName, $data);
-
-        $view->render();
+        $this->render($data);
     }
 }
\ No newline at end of file
diff --git a/src/controller/profile/EditProfileController.php b/src/controller/profile/EditProfileController.php
index e27fec2..3fa9d91 100644
--- a/src/controller/profile/EditProfileController.php
+++ b/src/controller/profile/EditProfileController.php
@@ -14,14 +14,7 @@ class EditProfileController extends Controller {
             $data = $userModel->getCurrentUser();
         }
 
-        $dir = __DIR__;
-        $dir = explode("/", $dir);
-        $folderName = end($dir);
-        $className = get_class();
-        $fileName = str_replace('Controller', '', $className);
-        $view = $this->view($folderName, $fileName, $data);
-
-        $view->render();
+        $this->render($data);
     }
 
     public function post() {
diff --git a/src/controller/profile/ProfileController.php b/src/controller/profile/ProfileController.php
index e052a4b..e5f3e9f 100644
--- a/src/controller/profile/ProfileController.php
+++ b/src/controller/profile/ProfileController.php
@@ -17,13 +17,6 @@ class ProfileController extends Controller
             $data = $userModel->getCurrentUser();
         }
 
-        $dir = __DIR__;
-        $dir = explode("/", $dir);
-        $folderName = end($dir);
-        $className = get_class();
-        $fileName = str_replace('Controller', '', $className);
-        $view = $this->view($folderName, $fileName, $data);
-
-        $view->render();
+        $this->render($data);
     }
 }
-- 
GitLab