今天开始带两个实习生做php(1)的框架个人觉得太垃圾了,于是重新写了一个。
首先是index.php,工程的入口。
index.php
?
<?php $url = 'app/login/Controller/LoginController.php?m=init'; ?> <html> <head> <meta http-equiv="refresh" content="0;url=<?php echo $url; ?>"> </head> </html>
?可以从代码看到这个php跳转到「app/login/Controller/LoginController.php?m=init」url上
那就看下LoginController.php
?
<?php require_once ($_SERVER['DOCUMENT_ROOT'] . '/demo/base/BaseController.php'); require_once ($_SERVER['DOCUMENT_ROOT'] . '/demo/app/login/service/LoginService.php'); class LoginController extends BaseController { /** * ログイン初期化の処理 */ public function init() { // フォームを取得する $form = parent :: post2Form(APP_LOGIN); // smartyを作成する $smarty = parent :: getSmarty(); $smarty->assign(FORM, $form); $smarty->display('view/login/login.htm'); } /** * 開始ボタンを押す処理 */ public function start() { // フォームを取得する $form = parent :: post2Form(APP_LOGIN); // Serviceを呼び出す parent :: doService(APP_LOGIN, METHOD_START, $form, false); // smartyを作成する $smarty = parent :: getSmarty(); $smarty->assign(FORM, $form); $smarty->display('view/login/login.htm'); } } // Controllerをインスタンスする $loginController = new LoginController; // メソッドを取得する $method = $loginController->getMethod(); // 実行する $loginController-> $method (); ?>
?这个代码里面有很多用到了父类的方法,我们再看下父类吧
?
BaseController.php
<?php require_once ($_SERVER['DOCUMENT_ROOT'] . '/demo/common/Const.php'); require_once (COMMON_PATH . 'StringUtils.php'); require_once (SMARTY_PATH . 'Smarty.class.php'); class BaseController { /** * smartyを初期化する */ public function getSmarty() { $smarty = new Smarty; $smarty->template_dir = TEMPLATE_DIR; $smarty->compile_dir = COMPILE_DIR; $smarty->config_dir = CONFIG_DIR; $smarty->cache_dir = CACHE_DIR; $smarty->left_delimiter = LEFT_DELIMITER; $smarty->right_delimiter = RIGHT_DELIMITER; // プロジェクト名を設定する $smarty->assign(P_NAME, P_NAME_VAL); return $smarty; } /** * REQUEST_URIからメソッドを取得 */ public function getMethod() { $uri = $_SERVER['REQUEST_URI']; // uriがempty以外の場合 if (!StringUtils :: isEmpty($uri)) { $arrUrl = parse_url($_SERVER['REQUEST_URI']); // uri中メソッド名を設定設定する場合 if (!StringUtils :: isEmpty($uri)) { $arrParams = null; parse_str($arrUrl['query'], $arrParams); return $arrParams['m']; // uri中メソッド名を設定しない場合 } else { return METHOD_INIT; } // uriがemptyの場合 } else { return METHOD_INIT; } } /** * $_POST中の値からformにセットする */ public function post2Form($name) { require_once (APP_PATH . $name . '/form/' . $name . 'Form.php'); $formName = $name . 'Form'; // formを初期化する $form = new $formName; // formのすべての変数を取得する $class_var_arr = get_class_vars(get_class($form)); foreach ($class_var_arr as $name => $value) { if (!StringUtils :: isEmpty(@ $_POST[$name])) { $form-> $name = @ $_POST[$name]; } } return $form; } /** * $_GET中の値からformにセットする */ public function get2Form(& $form) { // formのすべての変数を取得する $class_var_arr = get_class_vars(get_class($form)); foreach ($class_var_arr as $name => $value) { if (!StringUtils :: isEmpty(@ $_GET[$name])) { $form-> $name = @ $_GET[$name]; } } } /** * Serviceを呼び出す * * @param String $name 機能名 * @param String $methodName 呼び出されたメソッド名 * @param Object $form フォーム * @param boolean $isOpenTrans true:トランザクション必要 false:トランザクション必要がない */ public function doService($name, $methodName, & $form, $isOpenTrans) { require_once (APP_PATH . $name . '/service/' . $name . 'Service.php'); // TODO $isO