今天开始带两个实习生做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