zoukankan      html  css  js  c++  java
  • PHP面向对象之页面控制器

    <?php
    /*
        页面控制器模式:按我的理解就是将业务逻辑和视图分离开来(通常最简便的写法是php和html代码是混合在一个文件里面的),
    即一个业务逻辑文件对应一个视图文件。
        代码示例即注解如下:
    
    */
    //页面控制器模式
    
    
    namespace woocontroller;
    //业务逻辑文件 (文件名AddVenue.php)
    abstract class PageController {   //基类
        private $request;
        function __construct (){    
            $request = wooaseRequestRegistry::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 { //这个类的作用就是向数据库写入一个venue数据(数据表结构类似:id,name)        
        function process(){
            try{
                $request = $this->getRequest();
                $name = $request->getProperty('venue_name');                //获取用户提交的venue的名称
                if(is_null($request->getProperty('submitted'))){            //判断是否表单提交,否的话跳转到add_nenue.php
                    $request->addFeedback("choose a name for the venue");    
                    $this->forward('add_nenue.php');                        
                } else if (is_null($name)){                                    //判断表单提交是否有name 
                    $request->addFeedback("name is a required field");    
                    $this->forward('add_venue.php');                        //跳转add_venue.php
                }        
                $venue = new woodomainVenue(null,$name);                    //创建对象便可将它添加到数据库,具体内部的业务逻辑不必深究。
                $this->forward("ListVenues.php");                            //添加成功后跳转ListVenues.php,即一个列表数据的显示界面    
            } catch(Exception $e){
                $this->forward('error.php');                                //跳转到一个错误界面            
            }
        }
    }
    
    $controller = new AddVenueController();                                    //执行这个类的process()方法
    $controller->process();
    
    ?>
    
    <?php 
    //视图文件 (文件名add_venue.php)
    require_once("woo/base/RequestRegistry.php");
    $request = wooaseRequestRegistry::getRequest();
    ?>
    <html>
    <head>
    <title>Add Venue</title>
    </head>
    
    <body>
        <h1>Add Venue</h1>
        <table>
        <tr>
            <td>
            <?php print $request->getFeedbackString('</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>
  • 相关阅读:
    ObjectiveC 日记①
    C# WPF vs WinForm
    Ext.Net之 GridPanel Excel导出方法实现
    C 温故知新 之 指针:函数指针变量、指针型函数
    C 温故知新 之 指针:基本概念&变量的指针和指向变量的指针
    C 温故知新 之 指针:数组指针、字符串指针、函数指针
    Linq之 推迟查询 VS 立即查询
    Windows 下搭建ObjectiveC 开发环境
    (转) ObjectiveC 日记② 关于self用法
    windows phone 8 开发环境详细图解
  • 原文地址:https://www.cnblogs.com/kerryw/p/6942449.html
Copyright © 2011-2022 走看看