今天开始带两个实习生做php(1)的框架个人觉得太垃圾了,于是重新写了一个。
首先是index.php,工程的入口。
index.php
?
<?php $url = 'app/login/Controller/LoginController.php?m=init';?> <meta http-equiv="refresh" content="0;url=<?php echo $url; ?>">
Nach dem Login kopieren
?可以从代码看到这个php跳转到「app/login/Controller/LoginController.php?m=init」url上
那就看下LoginController.php
?
<?phprequire_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 ();?>
Nach dem Login kopieren
?这个代码里面有很多用到了父类的方法,我们再看下父类吧
?
BaseController.php
<?phprequire_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 $isOpenTrans $serviceName = $name . 'Service'; $service = new $serviceName; $service-> $methodName ($form); // TODO $isOpenTrans }}?>
Nach dem Login kopieren
?常量文件
?
Const.php
?
<?php /* プロジェクト名(共通用) */define('P_NAME', 'p_name');define('P_NAME_VAL', 'demo');/* ルートパス(共通用)*/define('ROOT_PATH', $_SERVER['DOCUMENT_ROOT'] . '/' . P_NAME_VAL . '/');define('COMMON_PATH', $_SERVER['DOCUMENT_ROOT'] . '/' . P_NAME_VAL . '/common/');define('APP_PATH', $_SERVER['DOCUMENT_ROOT'] . '/' . P_NAME_VAL . '/app/');/* SMARTYパス(共通用) */define('SMARTY_PATH', ROOT_PATH . 'smarty/');define('TEMPLATE_DIR', SMARTY_PATH . 'Templates/');define('COMPILE_DIR', SMARTY_PATH . 'Templates_c/');define('CONFIG_DIR', SMARTY_PATH . 'Configs/');define('CACHE_DIR', SMARTY_PATH . 'Cache/');/* SMARTY標記(共通用) */define('LEFT_DELIMITER', '[{');define('RIGHT_DELIMITER', '}]');/* 定数(String) */define('FORM', 'form');/* メソッド名 */define('METHOD_INIT', 'init');define('METHOD_START', 'start');/* 機能ID */define('APP_LOGIN', 'login');?>
Nach dem Login kopieren
?工具文件:
?
StringUtils.php
?
<?phpclass StringUtils { /** * 文字列がemptyの判断 */ public static function isEmpty($str) { if (isset ($str) && !empty ($str)) { return false; } return true; }}?>
Nach dem Login kopieren
?
?
?html代码
login.htm
<title>ああ</title> <style> table{ font-size:15px; font-family:MS ゴシック; border-collapse:collapse; } body{ font-size:15px; font-family:MS ゴシック; } .bordertable th{ border:1px solid lightgreen!important; background-color:lightgreen; text-align:right; } .bordertable td{ border:1px solid lightgreen!important } </style> <script type="text/javascript" src="/demo/smarty/Templates/js/jquery-1.9.1.js"></script> <script type="text/javascript"> $(document).ready(function() { // 開始ボタンを押す $("#startBtn").click(function() { $("#loginForm").prop("action", "/demo/app/login/Controller/LoginController.php?m=start"); $("#loginForm").submit(); }); }); </script>
Nach dem Login kopieren
?
?
?到目前为止,form实例化,service调用已经封装,
为完待续。
如果有好的建议请大家给指导下,我以前没有做过php,所以如果有错误请见谅。
?
1 楼 houxinyou 2013-03-22
网上有那么多现成的PHP框架为什么不用呢?
2 楼 guyanliang 20 小时前
zend-framework 干嘛不用呢