Constant research allowed me to see that there were a lot of PHP frameworks presented on the web. There were even comparison of each other and whose the best maybe. Take Zend for example. It offers you a lot. However, you must understand that there are functionalities that are unfamiliar to you which careful measures must be considered before implementation.
But I'm not against those frameworks because in reality, they were already tested and proven effective in rapid application development. In fact, they ease the work load double fold. I'm not in doubt of their capacity(frameworks) but of course I would like to learn how did they do it.
I understand that complex codes are very difficult to follow and understand so I'd like to throw a simplier solution to those developing website in PHP using the FrontController.
What is a FronController? It is simply the gateway to an application. All request must hit the front controller leaving it to decide what to do next. A web application typically has to set up sessions, connect to database, and delegate variety of request to controllers. And that's what FrontController has to do. What happens here is the program flow logic.
A simple representation of this is the code below:
index.php
<php session_start(); $redirect = !empty($GET["page"] ? $_GET["page"] : "home"; switch($redirect){ case "home": include "pages/home.php"; break; case "account": include "pages/account.php"; break; } ?>
OOP Approach
index.php
<php define("APP_DIR", dirname(_FILE_) . "/pages"); require_once "FrontController.php"; FrontController::instance()->redirect(); ?>
FrontController.php
<php class FrontController{ public static function instance(){ if(!defined("APP_DIR")){ ext("Severe: Cannot proceed without access to application directory."); } } public function redirect(){ $page = !empty($_GET["page"]) ? $_GET["page"] : "home"; $action = !empty($_GET["action"] ? $_GET["action"] : "default"; $object = ucfirst($page) . "Controller"; $file = APP_DIR . "/" . $page . "/" . $object . ".php"; if(!is_file($file)){ exit("Severe: Controller not found!"); } require_once $file; $method = "do" . ucfirst($action); $controller = new $object(); if(!method_exists($controller, $method)){ exit("Severe: Action not found."); } $controller->$method(); exit(0); } } ?>
account/AccountController.php
Now, invoke url adding this parameter: index.php?page=account&action=printFName. You should be able to see the message, Your are in AccountController with doPrintFName function. Invoke index.php?page=account&action=printLName, what can you see?<php class AccountController{ public function doPrintFName(){ echo "Your are in AccountController with doPrintFName function"; } public function doPrintLName(){ echo "Your are in AccountController with doPrintLName function"; } } ?>
In here, I showed a very simple pattern how you can achieved a healthier PHP application with a pattern which helps you debug faster. There is a better way to achieve MVC pattern in PHP. I'll do it later...
No comments:
Post a Comment