今天开始带两个实习生做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,所以如果有错误请见谅。
相关推荐
"今天开始带两个实习生做PHP(1)"这个标题暗示了这是一个教学系列的开端,可能涵盖了一系列的教程或实践项目,旨在帮助初学者快速上手。 首先,我们要理解PHP的特性。PHP是一种开源、免费的脚本语言,主要用于Web...
2. **助教角色**:作为讲师的助手,实习生学习了如何收集学员反馈、处理问题和协助讲师,这是团队协作和项目管理的基本技能。 3. **编程基础**:实习过程中,实习生强调了扎实的编程基础对于教学和解决突发问题的...
在本文中,实习生开始接触PHP和Java这两种编程语言。PHP是一种广泛应用的开源脚本语言,尤其适合Web开发,具有安全性高、跨平台性强、兼容多种数据库的优势。Java则以其“一次编写,到处运行”的特性而广受欢迎。在...
实习期间,实习生分别在两家公司进行了为期4个月和3个月的实践,通过实际项目参与,深化了对软件开发流程的理解,特别是软件测试、项目管理和编程技术的运用。 【实习公司一:天津**信息系统开发有限公司】 在这家...
- 实习生通过实际项目锻炼,了解到过去在学校学习的基础知识在实际工作中依然有用,如Flash、JavaScript和数据库技术,尽管某些技能可能未被充分利用,但基础扎实便于快速上手新任务。 - 使用LAMP(Linux + Apache...
实习要求实习生遵守纪律,爱护设备,做好笔记,并在实践中不断提升动手能力和团队协作精神。 实习形式分为两部分:复习基础知识和实际设计网站。在实验过程中,学生需要搜集资料,熟悉设计软件如Dreamweaver,构建...
12. 自学技能:实习生在工作中自学了Ajax和jQuery,这两个JavaScript库在动态网页开发中广泛使用,能够实现异步数据交互和页面元素的动态更新。 13. 软件开发流程:公司有严格的开发管理流程,包括开发工具的选择、...
通过这份实习周记模版,我们可以看到实习生从理论学习到实际应用的过程。从了解论坛系统的原理和技术架构,到使用CodeIgniter框架进行开发,再到数据库的设计与优化,每一周都有明确的目标和任务。这样的实习经历...
实习期间,实习生们面临的另一个挑战是如何在有限的时间内完成任务。这要求他们高效地分工合作,利用已有的编程知识,同时快速学习新的技术,如ASP在Unix服务器上的部署和配置。在这个过程中,实习生们锻炼了项目...
以下是对这两个主题的详细说明: 一、微机组装与硬件维护 1. **实训目标**:通过实践操作,提升对微机硬件系统理解和微机硬件维护的能力。 2. **实训内容**: - 学习使用工具:十字螺丝刀、一字螺丝刀、镊子、...
【实习记录型网站】是一个专为实习生设计的在线平台,旨在帮助他们记录并分享实习期间的经历、学习与成长。这个网站包含两个核心功能模块:登录系统和论坛。这两个功能是任何交互性强的在线社区的基础,使得用户能够...
通过这样的实践,实习生能够更深入地理解系统管理的意义,包括性能优化、问题排查和系统稳定性的保障。 6. **安装过程**: 报告详细描述了Windows 2000 Advanced Server的安装步骤,包括在Linux虚拟机中创建虚拟机...
标题"基于ASP.NET的学生校外实习管理系统源码.zip"表明这是一个使用ASP.NET技术开发的学生校外实习管理系统的源代码包。这通常意味着系统是用于高校或教育机构,帮助协调和管理学生的校外实习活动,如实习申请、审批...
【软件工程实习报告之论坛(BBS)创建】 在软件工程实习过程中,创建一个论坛(BBS)是一项典型的项目,它涉及到网页...通过这个实习项目,实习生可以深入理解Web应用的开发流程,并掌握相关技术在实际项目中的应用。
【计算机基础实习指导】 计算机基础实习是学习计算机知识的重要环节,尤其对于初学者而言,能够通过实际操作加深理解和掌握理论知识。本实习指导书主要针对计算机基础中的网站规划与网页设计,旨在帮助学生掌握基本...
2. 校园招聘平台:这类平台是专门为高校学生和毕业生提供求职服务的在线系统。它们通常包含职位发布、简历投递、在线面试预约、招聘会信息等功能。通过这些平台,企业可以直接接触到大量的学生人才,而学生则能方便...
【软件工程实习报告之论坛(BBS)创建】 在软件工程的实践中,创建一个论坛(BBS)是一项常见的任务,它涉及到用户交互、...这个实习项目不仅提升了实习生的编程技能,也锻炼了他们对软件工程整体流程的理解和实践经验。
2. 个人简历管理:学生用户可以创建、编辑和上传个人简历,包括基本信息、教育背景、技能特长、实习经历等,以便企业快速了解其能力。 3. 招聘职位发布:企业用户可以发布招聘信息,包括职位名称、工作职责、任职...
- **Swing** 和 **Qt**:作为桌面应用开发的两个重要框架,它们虽提供了一定程度的可视化辅助设计,但相比VB,代码量仍然较大。 - **Android** 和 **J2ME**:面向移动平台的应用开发,也涉及图形用户界面的设计。 ...