【深入PHP 面向对象】读书笔记(二十) - 企业模式(五) - 页面控制器

12.3.3 页面控制器

<?php

require 'Venue.php';
try {
    $venues = Venue::findAll();
} catch(Exception $e) {
    include 'error.php';
    exit(0);
}

?>

<!DOCTYPE html>
<html>
<head>
<title>Venues</title>
</head>
<body>
<h1>Venues</h1>

<?php foreach($venues as $venue) { ?>
    <?php echo($venue->getName())?> <br>
<?php }?>

</body>
</html>

一个最基本的页面控制器,正常情况下显示默认的页面,如果发生错误,则显示 error 错误页面。

下面我们封装一个页面控制器抽象类,具体的页面控制器继承这个抽象类:

abstract class PageController {
    private $request;

    function __construct() {
        $request = RequestRegistry::getRequest();
        if (is_null($request)) {
            $request = new Request();
        }
        $this->request = $request;
    }

    abstract function process();

    function forward($resource) {
        include '$resource';
        exit(0);
    }

    function getRequest() {
        return $this->request;
    }
}

创建以新场所的页面控制器:

class AddVenueController extends PageController {
    function process() {
        try {
            $request = $this->getRequest();
            $name = $request->getProperty("venue_name");
            if (is_null($request->getProperty('submitted'))) {
                $request->addFeedback("choose a name for the venue");
                $this->forward('add_venue.php');
            } else if (is_null($name)) {
                $request->addFeedback("name is a required field");
                $this->forward('add_venue.php');
            }

            $venue = new Venue(null, $name);
            $this->forward('ListVenues.php');
        } catch (Exception $e) {
            $this->forward('error.php');
        }
    }
}

$contorller = new AddVenueController();
$contorller->process();

AddVenueController 类中只实现了 process() 方法,该方法负责检查用户提交的数据,如果正确则加载下一个视图(ListVenues.php),如果用户未提交表单,或者表单填写错误,则重新显示该页面(add_venue.php)。

下面是视图页面:

<?php
require_once 'RequestRegistry.php';
$request = RequestRegistry::getRequest();
?>

<!DOCTYPE html>
<html>
<head>
<title>Add Venue</title>
</head>
<body>
<h1>Add Venue</h1>
<table><tr><td><?php $request->geetFeedbackString('</td></tr><tr><td>') ?></td></tr></table>
<form action="AddVenue.php" method="get">
    <input type="hidden" name="submitted" value="yes">
    <input type="text" name="venue_name">
</form>
</body>
</html>

视图的工作就是显示数据。

整个流程:

这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值