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获取mysql数据库中的所有表名的代码
Apr 23 PHP
供参考的 php 学习提高路线分享
Oct 23 PHP
PHP对MongoDB[NoSQL]数据库的操作
Mar 01 PHP
浅谈php中mysql与mysqli的区别分析
Jun 10 PHP
基于PHP文件操作的详细诠释
Jun 21 PHP
php生成图形验证码几种方法小结
Aug 15 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
Jun 19 PHP
php+redis实现多台服务器内网存储session并读取示例
Jan 12 PHP
关于php几种字符串连接的效率比较(详解)
Feb 22 PHP
PHP实现发送微博消息功能完整示例
Dec 04 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
Feb 16 PHP
php实现断点续传大文件示例代码
Jun 19 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
一台收音机,让一家人都笑逐颜开!
2020/08/21 无线电
我的论坛源代码(八)
2006/10/09 PHP
PHP文章采集URL补全函数(FormatUrl)
2012/08/02 PHP
php截取字符串并保留完整xml标签的函数代码
2013/02/06 PHP
php中autoload的用法总结
2013/11/08 PHP
php去除换行(回车换行)的三种方法
2014/03/26 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
2017/05/02 PHP
js构造函数、索引数组和属性的实现方式和使用
2014/11/16 Javascript
浅析javascript中的事件代理
2015/11/06 Javascript
javascript如何实现360度全景照片问题汇总
2016/04/04 Javascript
如何使用AngularJs打造权限管理系统【简易型】
2016/05/09 Javascript
浅谈React 属性和状态的一些总结
2016/11/21 Javascript
基于ajax与msmq技术的消息推送功能实现代码
2016/12/26 Javascript
JS实现弹出下载对话框及常见文件类型的下载
2017/07/13 Javascript
在 Angular 中使用Chart.js 和 ng2-charts的示例代码
2017/08/17 Javascript
JavaScript实现简单计算器功能
2019/12/19 Javascript
Vue移动端项目实现使用手机预览调试操作
2020/07/18 Javascript
vue vant中picker组件的使用
2020/11/03 Javascript
python基于pygame实现响应游戏中事件的方法(附源码)
2015/11/11 Python
Python实现图片滑动式验证识别方法
2017/11/09 Python
Python中安装easy_install的方法
2018/11/18 Python
python3利用ctypes传入一个字符串类型的列表方法
2019/02/12 Python
python实现拉普拉斯特征图降维示例
2019/11/25 Python
python 读取.nii格式图像实例
2020/07/01 Python
5 分钟读懂Python 中的 Hook 钩子函数
2020/12/09 Python
科尔士百货公司官网:Kohl’s
2016/07/11 全球购物
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
Booking.com缤客中国:全球酒店在线预订网站
2020/05/03 全球购物
命名空间(namespace)和程序集(Assembly)有什么区别
2015/09/25 面试题
党的群众路线教育实践活动心得体会900字
2014/03/07 职场文书
考核评语大全
2014/04/29 职场文书
个人委托书
2014/07/31 职场文书
安全例会汇报材料
2014/08/23 职场文书
小学生六年级作文之关于感恩
2019/08/16 职场文书
入门学习Go的基本语法
2021/07/07 Golang
MySQL慢查询优化解决问题
2022/03/17 MySQL