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 生成文字png图片的代码
Apr 17 PHP
openPNE常用方法分享
Nov 29 PHP
PHP APC的安装与使用详解
Jun 13 PHP
新浪微博OAuth认证和储存的主要过程详解
Mar 27 PHP
PHP准确取得服务器IP地址的方法
Jun 02 PHP
试用php中oci8扩展
Jun 18 PHP
yii2中结合gridview如何使用modal弹窗实例代码详解
Jun 12 PHP
PHP购物车类Cart.class.php定义与用法示例
Jul 20 PHP
PDO操作MySQL的基础教程(推荐)
Aug 18 PHP
php微信公众号开发之音乐信息
Oct 20 PHP
PHP INT类型在内存中占字节详解
Jul 20 PHP
php解决crontab定时任务不能写入文件问题的方法分析
Sep 16 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
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
2010/02/16 PHP
php explode函数实例代码
2012/02/27 PHP
win7下memCache的安装过程(具体操作步骤)
2013/06/28 PHP
使用php显示搜索引擎来的关键词
2014/02/13 PHP
php像数组一样存取和修改字符串字符
2014/03/21 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
2015/06/17 PHP
PHP中Session可能会引起并发问题
2015/06/26 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
2018/05/31 PHP
PHP正则表达式处理函数(PCRE 函数)实例小结
2019/05/09 PHP
圣诞节Merry Christmas给博客添加浪漫的下雪效果基于jquery实现
2012/12/27 Javascript
当鼠标移动时出现特效的JQuery代码
2013/11/08 Javascript
JS获取URL中的参数数据
2013/12/05 Javascript
Egret引擎开发指南之创建项目
2014/09/03 Javascript
jQuery找出网页上最高元素的方法
2015/03/20 Javascript
javascript无刷新评论实现方法
2015/05/13 Javascript
值得分享的Bootstrap Ace模板实现菜单和Tab页效果
2015/12/30 Javascript
AngularJS入门教程之服务(Service)
2016/07/27 Javascript
js拖拽功能实现代码解析
2016/11/28 Javascript
微信小程序-小说阅读小程序实例(demo)
2017/01/12 Javascript
JS使用cookie实现只出现一次的广告代码效果
2017/04/22 Javascript
js Date()日期函数浏览器兼容问题解决方法
2017/09/12 Javascript
nodejs结合Socket.IO实现的即时通讯功能详解
2018/01/12 NodeJs
简化版的vue-router实现思路详解
2018/10/19 Javascript
JavaScript错误处理操作实例详解
2019/01/04 Javascript
基于p5.js 2D图像接口的扩展(交互实现)
2020/11/30 Javascript
Python实现二分查找算法实例
2015/05/26 Python
Python正则表达式教程之三:贪婪/非贪婪特性
2017/03/02 Python
python生成二维码的实例详解
2017/10/29 Python
Python设计模式之职责链模式原理与用法实例分析
2019/01/11 Python
python按键按住不放持续响应的实例代码
2019/07/17 Python
canvas 阴影和图形变换的示例代码
2018/01/02 HTML / CSS
毕业生的自我评价
2013/12/30 职场文书
企业管理培训感言
2014/01/27 职场文书
节水宣传标语口号
2015/12/26 职场文书
2016年社区综治宣传月活动总结
2016/03/16 职场文书
MySQL查询学习之基础查询操作
2021/05/08 MySQL