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+FLASH实现上传文件进度条相关文件 下载
Jul 21 PHP
PHP的变量总结 新手推荐
Apr 18 PHP
打造超酷的PHP数据饼图效果实现代码
Nov 23 PHP
显示程序执行时间php函数代码
Aug 29 PHP
php用header函数实现301跳转代码实例
Nov 25 PHP
php操作mysql数据库的基本类代码
Feb 25 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(二)
Jun 23 PHP
Mac OS下配置PHP+MySql环境
Feb 25 PHP
MySql数据库查询结果用表格输出PHP代码示例
Mar 20 PHP
你应该知道PHP浮点数知识
May 13 PHP
阿里云Win2016安装Apache和PHP环境图文教程
Mar 11 PHP
Laravel框架源码解析之反射的使用详解
May 14 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
一个高ai的分页函数和一个url函数
2006/10/09 PHP
PHP数组去重的更快实现方式分析
2018/05/09 PHP
PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作详解
2019/06/14 PHP
laravel ORM关联关系中的 with和whereHas用法
2019/10/16 PHP
基于JQuery的日期联动实现代码
2011/02/24 Javascript
Javascript中的String对象详谈
2014/03/03 Javascript
JS实现点击按钮控制Div变宽、增高及调整背景色的方法
2015/08/05 Javascript
XML文件转化成NSData对象的方法
2015/08/12 Javascript
vue.js入门教程之计算属性
2016/09/01 Javascript
JavaScript 网页中实现一个计算当年还剩多少时间的倒数计时程序
2017/01/25 Javascript
利用Vue.js框架实现火车票查询系统(附源码)
2017/02/27 Javascript
React Native AsyncStorage本地存储工具类
2017/10/24 Javascript
vue打包静态资源后显示空白及static文件路径报错的解决
2020/09/02 Javascript
python计算auc指标实例
2017/07/13 Python
python批量读取txt文件为DataFrame的方法
2018/04/03 Python
python实现百度语音识别api
2018/04/10 Python
python计算两个数的百分比方法
2018/06/29 Python
python 实现让字典的value 成为列表
2019/12/16 Python
python批量修改xml属性的实现方式
2020/03/05 Python
pandas中的ExcelWriter和ExcelFile的实现方法
2020/04/24 Python
基于django2.2连oracle11g解决版本冲突的问题
2020/07/02 Python
Html5踩坑记之mandMobile使用小记
2020/04/02 HTML / CSS
Lulu Guinness露露·吉尼斯官网:红唇包
2019/02/03 全球购物
如何用Python来进行查询和替换一个文本字符串
2014/01/02 面试题
中专毕业生的自我鉴定
2013/12/01 职场文书
企业总经理岗位职责
2014/02/13 职场文书
十佳护士获奖感言
2014/02/18 职场文书
《学会待客》教学反思
2014/02/22 职场文书
2015年超市工作总结范文
2015/05/26 职场文书
小兵张嘎电影观后感
2015/06/03 职场文书
永不妥协观后感
2015/06/10 职场文书
首次购房证明
2015/06/19 职场文书
2016年三八红旗手先进事迹材料
2016/02/26 职场文书
创业计划书之水果店
2019/07/18 职场文书
golang 实现菜单树的生成方式
2021/04/28 Golang
详解MySQL主从复制及读写分离
2021/05/07 MySQL