用php制作多个相似页,PHP一个文件显示多个不同页面是什么机制?

首先是Web服务器把不存在的路径转给index.php处理,比如Nginx:

location / {

try_files $uri $uri/ /index.php?$args;

}

然后前端控制器index.php做URL路由分发,比如Symfony官方文档的前端控制器index.php示例:

index.php //前端控制器(路由):

// 加载并初始化任何全局库

require_once 'model.php'; //模型(CRUD)

require_once 'controllers.php'; //控制器(调用模型的CRUD函数,载入视图模板)

// 在内部路由用户的请求(用函数parse_url分析REQUEST_URI很方便)

$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);

if ('/index.php' == $uri) {

list_action();

} elseif ('/index.php/show' == $uri && isset($_GET['id'])) {

show_action($_GET['id']);

} else {

header('Status: 404 Not Found');

echo '页面未找到';

}

controllers.php //控制器(调用模型,载入视图)

function list_action() {

$posts = get_all_posts(); // 模型model.php里的函数

require 'templates/list.php'; // 视图

}

function show_action($id) {

$post = get_post_by_id($id); // 模型model.php里的函数

require 'templates/show.php'; // 视图

}

Discuz!有些页面用的是页面控制器,而不是前端控制器,viewthread.php就是一个页面控制器.页面控制器+common.php结合也是一个不错方法,这样浏览器就能直接访问页面控制器,而不需要经过前端控制器进行路由.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值