|
今天开始带两个实习生做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 $isOpenTrans
$serviceName = $name . 'Service';
$service = new $serviceName;
$service-> $methodName ($form);
// TODO $isOpenTrans
}
}
?>
常量文件
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');
?>
工具文件:
StringUtils.php
<?php
class StringUtils {
/**
* 文字列がemptyの判断
*/
public static function isEmpty($str) {
if (isset ($str) && !empty ($str)) {
return false;
}
return true;
}
}
?>
html代码
login.htm
<html>
<head>
<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>
</head>
<body style="text-align:center">
<form id="loginForm" method="post">
<h1>2013年春のアンケート調査</h1>
<table class=bordertable>
<tr>
<th>社員番号</th>
<td><input type="text" id="user_id" name="user_id" style="width:200px" value="[{$form->user_id}]"></td>
</tr>
</table>
<br>
<input type="button" id="startBtn" value="開始"/>
</form>
</body>
</html>
到目前为止,form实例化,service调用已经封装,
为完待续。
如果有好的建议请大家给指导下,我以前没有做过php,所以如果有错误请见谅。 |
|
所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298
本贴地址:https://www.yunweiku.com/thread-360616-1-1.html
上篇帖子:
PHP 执行系统外部命令 system() exec() passthru()
下篇帖子:
php 添加水印, 格式转换, 变换大小 Watermark, png2jpg, resize
|