Phpbean路由转发的php代码


Posted in PHP onJanuary 10, 2008

第一步:入门
如何使用phpbean进行路由转发呢?下面是一个简单的使用例子。
首先,index.php是程序的单一入门,主要进行路由转发的工作。Index.php的程序代码如下:

<? 
include('startup.php');//载入启动文件 
try{ 
    $router=new Phpbean_Router();//初始化路由器 
    $router->set_path(SITE_PATH.'/app/actions');//设置控制器的目录 
    $router->dispatch();//路由转发处理 
}catch (Exception $e){ 
    echo $e; 

?> 

其中启动文件如下:

<? 
define('SITE_PATH',str_replace('\','/',dirname(__FILE__))); 
set_include_path(get_include_path().PATH_SEPARATOR.SITE_PATH.'/libs/'); 
function __autoload($filename){ 
    $filepath = SITE_PATH.'/libs/'.str_replace('_','/',$filename).'.php'; 
    if(is_file($filepath)){ 
        include($filepath); 
    } 
}?> 

然后,我们写一个action测试一下。(关于为什么选择action而不是使用controller做为控制,可以看我之前的文章逐步提升框架的性能)
比如app/actions/indexAction.php,在里面写一个测试
<? 
class indexAction extends Phpbean_Action { 

    function run(){ 
        echo 'phpbean_index page!'; 
    }     
}?> 
打开IE输入地址http://localhost:8080/phpbean/index.php/index看看结果。

第二步:获取url参数
比如说我要使用url传递参数,如何在PHPbean中实现呢?phpbean中的pathinfo支持两种获取数据方式,一种是按照关键字,一种是按照顺序(默认)。
以刚才的例子来说,在地址http://localhost:8080/phpbean/index.php/index后面加上参数http://localhost:8080/phpbean/index.php/index/1/2/3/4/
那么,使用关键字来获取url参数,使用$this->_getParam(‘1','key')。比如在indexAction的run方法中增加echo $this->_getParam(‘1','key')那么就对应输出2。注意,在phpbean中按关键字获取url参数不要求匹配配对。比如说$this->_getParam(‘1','key') 返回2, $this->_getParam(‘2','key')就会返回3.
按照次序来获取url参数应该更加方便。比如说$this->_getParam(1)就会返回1,$this->_getParam($n)就会返回第$n个参数。

第三步、Action多级目录
一般来说,程序的设计都是module->controller->action的,比如说blog->user->login。那么使用phpbean的action可以很方便进行映射。

首先,我们在app/actions下面增加blog文件夹,再在app/actions/blog/下面增加user文件夹。

现在我们来写blog->user->login这个action。首先在app/actions/blog/user/下面建立loginAction.php。里面写入

<? 
class blog_user_loginAction extends Phpbean_Action { 

    function run(){ 
        echo 'blog_user_login'; 
    } 


?> 

然后测试下http://localhost:8080/phpbean/index.php/blog/user/login/,是不是成功了呢?

那么,“如何增加一些action的公用操作呢?比如admin目录下面的所有action都要进行isadmin()检查,如何实现呢?”在phpbean中可以使用继承很方便的来实现。下面以blog->admin为例来实现。
首先,增加一个admin目录,在该目录下增加一个action基类admin.php(注意,如果不是action,那么文件命名就不要使用***Action.php来命名)

<? 
abstract class _blog_admin extends Phpbean_Action { 

    function __construct($params){ 
        parent::__construct($params); 
        echo 'admin check!'; 
    } 


?> 

然后,admin目录下的所有的action都继承与_blog_admin,而不是Phpbean_Action,这样就实现了公用操作的封装。比如说在admin目录下建立一个loginAction.php

<? 
class blog_admin_loginAction extends _blog_admin { 

    function run(){ 
        echo 'blog_admin_login'; 
    } 


?>

PHP 相关文章推荐
PHP 选项及相关信息函数库
Dec 04 PHP
台湾中原大学php教程孙仲岳主讲
Jan 07 PHP
php echo()和print()、require()和include()函数区别说明
Mar 27 PHP
php中去除所有js,html,css代码
Oct 12 PHP
Linux下php5.4启动脚本
Aug 03 PHP
php修改上传图片尺寸的方法
Apr 14 PHP
php将字符串随机分割成不同长度数组的方法
Jun 01 PHP
PHP读取配置文件类实例(可读取ini,yaml,xml等)
Jul 28 PHP
PHPWind9.0手动屏蔽验证码解决后台关闭验证码但是依然显示的问题
Aug 12 PHP
thinkPHP5框架实现基于ajax的分页功能示例
Jun 12 PHP
PHP获取星期几的常用方法小结
Dec 18 PHP
TP5(thinkPHP5框架)实现显示错误信息及行号功能的方法
Jun 03 PHP
php框架Phpbean说明
Jan 10 #PHP
深入解析php模板技术原理【一】
Jan 10 #PHP
php下MYSQL limit的优化
Jan 10 #PHP
优化使用mysql存储session的php代码
Jan 10 #PHP
Http 1.1 Etag 与 Last-Modified提高php效率
Jan 10 #PHP
PHP读取目录下所有文件的代码
Jan 07 #PHP
台湾中原大学php教程孙仲岳主讲
Jan 07 #PHP
You might like
php实现中文字符截取防乱码方法汇总
2015/04/29 PHP
PHP与服务器文件系统的简单交互
2016/10/21 PHP
php实现留言板功能(会话控制)
2017/05/23 PHP
比较详细的javascript对象的property和prototype是什么一种关系
2007/08/06 Javascript
对javascript的一点点认识总结《javascript高级程序设计》读书笔记
2011/11/30 Javascript
jquery实现人性化的有选择性禁用鼠标右键
2014/06/30 Javascript
Node.js开发之访问Redis数据库教程
2015/01/14 Javascript
JavaScript更改字符串的大小写
2015/05/07 Javascript
vue.js,ajax渲染页面的实例
2018/02/11 Javascript
Express之托管静态文件的方法
2018/06/01 Javascript
webpack+vue-cli项目中引入外部非模块格式js的方法
2018/09/28 Javascript
详解vue-cli 2.0配置文件(小结)
2019/01/14 Javascript
基于mpvue的简单弹窗组件mptoast使用详解
2019/08/02 Javascript
[37:02]OG vs INfamous 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python获取list下标及其值的简单方法
2016/09/12 Python
梯度下降法介绍及利用Python实现的方法示例
2017/07/12 Python
Python优先队列实现方法示例
2017/09/21 Python
Python实现获取邮箱内容并解析的方法示例
2018/06/16 Python
TensorFlow打印tensor值的实现方法
2018/07/27 Python
django DRF图片路径问题的解决方法
2018/09/10 Python
简单了解python反射机制的一些知识
2019/07/13 Python
pytorch实现MNIST手写体识别
2020/02/14 Python
Python try except异常捕获机制原理解析
2020/04/18 Python
Python2及Python3如何实现兼容切换
2020/09/01 Python
Python logging日志库空间不足问题解决
2020/09/14 Python
国际知名军事风格休闲装品牌:Alpha Industries(阿尔法工业)
2017/05/24 全球购物
凯伦·米莲女装网上商店:Karen Millen
2017/11/07 全球购物
介绍一下linux的文件权限
2012/02/15 面试题
园长自我鉴定
2013/10/06 职场文书
建筑专业自荐信范文
2014/01/05 职场文书
材料化学专业求职信
2014/07/15 职场文书
婚内房产协议书范本
2014/10/02 职场文书
小人国观后感
2015/06/11 职场文书
人民的好儿女观后感
2015/06/18 职场文书
三八妇女节新闻稿
2015/07/17 职场文书
2015领导干部廉洁自律工作总结
2015/07/23 职场文书