创新实训(一)——HTML生成的开始

服务端收到请求后,会运行 web 文件夹下的 index.php 文件(由同目录下的.htaccess决定)

index.php 文件的内容截图如下:

index.php 会加载所需的函数库和类库,具体如下:

require $_SERVER['DOCUMENT_ROOT'] . '/app/libs/doj-lib.php';

该句是调用 /app/libs/ 下的php文件,用来调用一些类和方法。

doj-lib.php 的完整代码如下:

注意到 doj-lib.php 下有如下代码段:

function requirePHPLib($name) { // doj php lib
		require $_SERVER['DOCUMENT_ROOT'].'/app/libs/doj-'.$name.'-lib.php';
	}
	
	requirePHPLib('validate');
	requirePHPLib('query');
	requirePHPLib('rand');
	requirePHPLib('utility');
	requirePHPLib('security');
	requirePHPLib('contest');
	requirePHPLib('html');

可知在代码中调用了同类文件夹的其他 lib.php 文件,这些文件的具体功能大致如下:

  • validate:验证lib,用来验证某些信息是否合法,比如账号密码等
  • query:查询lib,用来调用后台数据库查询相关信息,结合 model 文件夹下的 DB.php 类使用
  • rand:随机lib,用来生成随机数据(随机数、随机文件名等)
  • utility:utility—lib,用来实现一些在web上的功能,比如配置合并,字符串处理等
  • security:安全lib,用来维护账号的安全,比如密码处理,token等
  • contest:比赛lib,用来处理比赛相关的方法集,比如计算rating,更新人数等
  • html:HTMLlib,用来接收网页相关信息、输出html代码等

注意到 doj-lib.php 下有如下代码段:

	Session::init();
	DOJTime::init();
	DB::init();
	Auth::init();
    	
	if (isset($_GET['locale'])) {
		DOJLocale::setLocale($_GET['locale']);
	}
	DOJLocale::requireModule('basic');

此段均是对 /app/models/ 下的部分类进行初始化,其中:

  • Session:初始化会话层相关的信息
  • DOJTime:初始化时间信息
  • DB:初始化和数据库的连接
  • Auth:初始化登录用户的信息
  • DOJLocale:中英文相关的配置信息

回到web 文件夹下的 index.php 文件,注意到如下代码:

require DOJContext::documentRoot().'/app/route.php';

其中,DOJContext类是用来管理和获取与当前Web请求相关的上下文信息,例如获取服务器环境信息,blog处理等。该句是调用路由文件。路由文件(route file) 去给请求中的网址匹配用于生成响应报文的 PHP 代码,结合 models 下的 Route 使用。 Route 定义了一个简单的路由系统,允许通过静态方法定义和管理路由。通过 match、get、post 等方法,可以方便地为不同的HTTP请求方法定义路由。通过 group 方法,可以对一组路由应用共同的属性。dispatch 方法用于遍历和匹配请求的路由,并执行相应的操作。整个路由系统利用静态属性和方法来管理路由,使其在应用中便于使用和扩展。

index.php 文件中,注意到如下代码:

include DOJContext::documentRoot().'/app/controllers'.call_user_func(function() {
	$route = Route::dispatch();
	$q_pos = strpos($route['action'], '?');
	
	if ($q_pos === false) {
		$path = $route['action'];
	} else {
		parse_str(substr($route['action'], $q_pos + 1), $vars);
		$_GET += $vars;
		$path = substr($route['action'], 0, $q_pos);
	}
	
	if (isset($route['onload'])) {
		call_user_func($route['onload']);
	}
	
	return $path;
});

这里是动态调用库文件,主要是根据用户的网页请求来调用。比如申请主页,会调用 controllersindex.php 文件。

posted @ 2024-05-30 19:24  山城甘草  阅读(17)  评论(0)    收藏  举报