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 301转向实现代码
Sep 18 PHP
ThinkPHP使用UTFWry地址库进行IP定位实例
Apr 01 PHP
两种设置php载入页面时编码的方法
Jul 29 PHP
PHP彩蛋信息介绍和阻止泄漏的方法(隐藏功能)
Aug 06 PHP
js代码实现微博导航栏
Jul 30 PHP
php实现图片上传、剪切功能
May 07 PHP
PHP的中使用非缓冲模式查询数据库的方法
Feb 05 PHP
利用PHPExcel读取Excel的数据和导出数据到Excel
May 12 PHP
Laravel 5.4重新登录实现跳转到登录前页面的原理和方法
Jul 13 PHP
PHP中number_format()函数的用法讲解
Apr 08 PHP
laravel 实现登陆后返回登陆前的页面方法
Oct 03 PHP
PHP字符串和十六进制如何实现互相转换
Jul 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
php mssql 日期出现中文字符的解决方法
2009/03/10 PHP
php之Memcache学习笔记
2013/06/17 PHP
php中memcache 基本操作实例
2015/05/17 PHP
Symfony2创建页面实例详解
2016/03/18 PHP
PHP实现的curl批量请求操作示例
2018/06/06 PHP
PHP PDOStatement::setAttribute讲解
2019/02/01 PHP
PHP get_html_translation_table()函数用法讲解
2019/02/16 PHP
ExtJS Store的数据访问与更新问题
2010/04/28 Javascript
解析javascript 实用函数的使用详解
2013/05/10 Javascript
ie8本地图片上传预览示例代码
2014/01/12 Javascript
js实现双击图片放大单击缩小的方法
2015/02/17 Javascript
javascript实现用户点击数量统计
2016/12/25 Javascript
BootStrap表单时间选择器详解
2017/05/09 Javascript
js实现鼠标跟随运动效果
2020/08/02 Javascript
vue源码学习之Object.defineProperty对象属性监听
2018/05/30 Javascript
angularjs请求数据的方法示例
2019/08/06 Javascript
Node配合WebSocket做多文件下载以及进度回传
2019/11/07 Javascript
[03:22]DSPL第一期精彩集锦:酷炫到底!
2014/11/07 DOTA
python操作MongoDB基础知识
2013/11/01 Python
python字符串排序方法
2014/08/29 Python
浅谈python 里面的单下划线与双下划线的区别
2017/12/01 Python
Python3实现发送QQ邮件功能(附件)
2020/12/23 Python
Python 装饰器实现DRY(不重复代码)原则
2018/03/05 Python
python 画出使用分类器得到的决策边界
2019/08/21 Python
jupyter notebook 多行输出实例
2020/04/09 Python
Windows下Sqlmap环境安装教程详解
2020/08/04 Python
浅谈CSS3 box-sizing 属性 有趣的盒模型
2019/04/02 HTML / CSS
美国滑雪板和装备购物网站:Skis.com
2018/12/20 全球购物
意大利在线药房:Farmacia Loreto Gallo
2019/08/09 全球购物
什么是索引指示器
2012/08/20 面试题
教育科学研究生自荐信
2013/10/09 职场文书
怎样写好自我评价呢?
2014/02/16 职场文书
建议书怎么写
2014/03/12 职场文书
小学班级特色活动方案
2014/08/31 职场文书
检讨书模板
2015/01/29 职场文书
运动会800米赞词
2015/07/22 职场文书