设为首页 收藏本站
查看: 667|回复: 0

[经验分享] 今天开始带两个实习生做php(2)

[复制链接]

尚未签到

发表于 2017-4-5 12:17:12 | 显示全部楼层 |阅读模式
  今天开始带两个实习生做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,所以如果有错误请见谅。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-360616-1-1.html 上篇帖子: PHP 执行系统外部命令 system() exec() passthru() 下篇帖子: php 添加水印, 格式转换, 变换大小 Watermark, png2jpg, resize
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表