位置: 编程技术 - 正文

Zend Framework教程之路由功能Zend_Controller_Router详解(zend framework手册)

编辑:rootadmin

推荐整理分享Zend Framework教程之路由功能Zend_Controller_Router详解(zend framework手册),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:zend framework手册,framework3.5怎么打开,zendstudio怎么创建php项目,framework3.5怎么打开,zendframework3,zendframework3,zendframework3,zendframework3,内容如对您有帮助,希望把文章链接给更多的朋友!

本文实例讲述了Zend Framework教程之路由功能Zend_Controller_Router用法。分享给大家供大家参考,具体如下:

Zend Framework的路由提供了两个主要功能路由和创建路由。

Zend_Controller_Router的Route类和相应Route目录下的类定义常见的路由操作。

接口Zend_Controller_Router_Interface,类Zend_Controller_Router_Abstract和Zend_Controller_Router_Rewrite完成了基本的路由,创建路由,删除路由的功能。

└── Router ├── Abstract.php ├── Exception.php ├── Interface.php ├── Rewrite.php ├── Route │ ├── Abstract.php │ ├── Chain.php │ ├── Hostname.php │ ├── Interface.php │ ├── Module.php │ ├── Regex.php │ └── Static.php └── Route.php

Zend_Controller_Router路由功能的实现

Zend_Controller_Router_Interface

Zend_Controller_Router_Abstract

Zend_Controller_Router_Rewrite

添加路由的操作方法

public function addRoute($name, Zend_Controller_Router_Route_Interface $route)public function addRoutes($routes)

addRoute的第一个参数是路由名。第二个参数是路由自己。路由名最普通的用法是通过Zend_View_Url助手的方法:

它将导致在 href: user/martel.

路由是一个简单的过程,这个过程通过所有提供的路由和匹配它的当前请求的URI定义来迭代。当一个正匹配被发现,变量值从路由实例返回并注入到Zend_Controller_Request对象以备将来在派遣器和用户创建的控制器中使用。如果是负匹配,在链中的下个路由被检查。

Note: 倒序匹配

用倒序来匹配路由确保最通用的路由被首先定义。

Note: 返回的值

从路由返回的值来自于URL参数或用于定义的缺省值。这些变量以后可通过Zend_Controller_Request::getParam() 或 Zend_Controller_Action::_getParam() 方法来访问。

有三个特殊的变量可用于你的路由-'module'、 'controller' 和 'action'。这些特殊的变量被Zend_Controller_Dispatcher用来找出控制器和动作然后派遣过去。

Note: 特殊变量

如果你选择通过 setControllerKey 和 setActionKey方法的方式来改变缺省值,这些特殊变量的名字可能会不同。

缺省路由

Zend_Controller_Router_Rewrite 和缺省路由一起预先配置,它将以controller/action的形式匹配URIs。另外,模块名可以被指定作为第一个路径参数,允许这种module/controller/action形式的URIs。最后,它也将缺省地匹配任何另外的追加到URI的参数-controller/action/var1/value1/var2/value2。

一些路由如何匹配的例子:

缺省路由是存储在RewriteRouter名(index)为'default'的简单的Zend_Controller_Router_Route_Module对象。它被创建多多少少象下面这样:

如果你不想这个特别的缺省路由在你的路由计划中,你可以重写你自己的‘缺省'路由(例如,把它存储在'default'名下)或用removeDefaultRoutes()完全清除它:

Zend Framework教程之路由功能Zend_Controller_Router详解(zend framework手册)

为了增加路由的灵活性,方便自定义新的路由类型,Zend_Controller_Router定义了Zend_Controller_Router_Route_Interface接口和类Zend_Controller_Router_Route_Abstract,实现相应的类方法即可定义路由类型,为开发提供了便利。

Zend_Controller_Router的路由类型

Zend_Controller_Router默认提供了以下路由类型,分别为:

Zend_Controller_Router_RouteZend_Controller_Router_Route_StaticZend_Controller_Router_Route_RegexZend_Controller_Router_Route_HostnameZend_Controller_Router_Route_ModuleZend_Controller_Router_Route_ChainZend_Controller_Router_Route

Zend_Controller_Router_Route是标准的框架路由。它结合了灵活路由定义的易用性。每个路由包含了基本的URL映射(静态的和动态的部分(变量))并且可以被缺省地初始化,也可以根据不同的要求初始化。

让我们想象一下我们假设的应用程序将需要一些广域内容作者的信息页面。我们想能够把浏览器指向 字符的的用法

当前的实现允许你使用任何字符(正斜杠除外)作为变量标识符,但强烈建议只使用PHP使用的变量标识符。将来的实现也许会改变这个行为,它可能会导致在你的代码里有隐藏的bugs。

当你把浏览器指向 regex 选项。在下面例子中,子域为动作控制器被用作用户名参数。 当组装路由时,你可以给出用户名为参数,就像你用其它路径参数一样:

Zend_Controller_Router_Route_Static

设置固定不变的路由:

上面的路由将匹配 AuthController::loginAction().

Zend_Controller_Router_Route_Regex

除了缺省的和静态的路由类型外,正则表达式路由类型也可用。这个路由比其它路由更强更灵活,只是稍微有点复杂。同时,它应该比标准路由快。

象标准路由一样,这个路由必须用路由定义和一些缺省条件来初始化。让我们创建一个archive路由作为例子,和先前定义的类似,这次只是用了Regex:

每个定义的regex子模式将被注入到请求对象里。同上述的例子,再成功匹配 在匹配之前,开头和结尾的斜杠从路由器里的URL中去除掉了。结果,匹配 行开头和行结尾符号(分别为'^' 和 '$')被自动预先追加到所有表达式。这样,你不需要在你的正则表达式里用它们,你应该匹配整个字符串。

Note: 这个路由类使用#符作为分隔符。这意味着你将需要避免哈希符('#')但不是正斜杠('/')在你的路由定义里。因为'#'符(名称为锚)很少被传给webserver,你将几乎不需要在你的regex里使用它。

你可以用通常的办法获得已定义的子模式的内容:

Note: 注意这个键是整数(1) 而不是字符串('1')。

因为'year'的缺省没有设置,这个路由将和它的标准路由副本不是非常精确地相同。即使我们为'year'声明一个缺省并使子模式可选,也不清楚是否会在拖尾斜杠(trailing slash)上还将有问题。方案是使整个'year'部分和斜杠一起可选但只抓取数字部分:(这段比较绕口,请校对者仔细看看,谢谢 Jason Qi)

让我们看看你可能注意到的问题。 给参数使用基于整数的键不是容易管理的办法,今后可能会有问题。这就是为什么有第三个参数。这是个联合数组表示一个regex子模式到参数名键的映射。我们来看看一个简单的例子:

这将导致下面的值被注入到请求:

这个映射被任何目录来定义使它能工作于任何环境。键可以包含变量名或子模式索引:

Note: 子模式键必须用整数表示。

注意在请求值中的数字索引不见了,代替的是一个名字变量。当然如果你愿意可以把数字和名字变量混合使用:

这将导致在请求中有混合的值可用。例如: assemble方法,你需要准备一个颠倒的URL。这个颠倒的路径用可由sprintf()解析的字符串来表示并定义为第四个构造参数:

所有这些都已经可能由标准路由对象完成,那么使用Regex路由的好处在哪里?首先,它允许你不受限制地描述任何类型的URL。想象一下你有一个博客并希望创建象 FrameWork框架入门教程》、《php优秀开发框架总结》、《Yii框架入门及常用技巧总结》、《ThinkPHP入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

Zend Framework教程之MVC框架的Controller用法分析 本文讲述了ZendFramework教程之MVC框架的Controller用法。分享给大家供大家参考,具体如下:这里简单讲讲MVC模式中Controller的基本使用方法。基本使用实例

PHP Echo字符串的连接格式 先给大家说下PHPecho()函数定义和用法echo()函数输出一个或多个字符串。注释:echo()函数实际不是一个函数,所以您不必对它使用括号。然而,如果您希

Zend Framework教程之Resource Autoloading用法实例 本文实例讲述了ZendFramework中ResourceAutoloading用法。分享给大家供大家参考,具体如下:通常,在开发应用程序中,可能类文件名不能按照标准ZendFramework

标签: zend framework手册

本文链接地址:https://www.jiuchutong.com/biancheng/289894.html 转载请保留说明!

上一篇:Zend Framework教程之Zend_Controller_Plugin插件用法详解(zendframework3中文手册)

下一篇:Zend Framework教程之MVC框架的Controller用法分析(framework core)

  • 进项税转出从待认证到月末结转的会计分录是
  • 单位的车辆车船税怎么交
  • 固定资产待抵扣进项税
  • 行政事业单位决算编制流程图
  • 销售给学员的教材是否要缴纳增值税?
  • 物业费的税金是否向业主收取
  • 一次性发放年终奖怎么税务筹划
  • 返点的保险费应计入哪里
  • 每月先报税还是先清卡
  • 一般纳税人收入会计分录
  • 机械租赁小规模企业所得税
  • 没有以前年度损益调整这个科目,怎么增加?
  • 销售货物产生的运费如何开票
  • 纳税人取得虚开的增值税专用发票处理问题的通知
  • 股权转让个人所得税如何申报
  • 企业出售产品
  • 未分配利润转增股本需要交税吗
  • 金蝶软件如何设置单价小数点
  • 工程开票是否需要资质?
  • 装修费属于劳务费吗
  • 纳税信用b
  • 如何界定广告
  • 教资认定流程详细步骤2023
  • 个税申报已经申报如何更改
  • 购入低值易耗品计入什么科目
  • 公账转私账可以撤销吗
  • 外国人可以参加中国境内的党派或政治团体
  • 专票入库单金额怎么算
  • 计提本月城市维护建设税,教育费附加500元
  • 如何安装os x
  • 房地产企业人防工程计入什么科目
  • 一接通电源就自动关机
  • 资产负债表日后至财务报告批准报出日之间
  • 其他应付款科目核算的内容包括
  • 表彰比例如何确定
  • windows11怎么设置默认应用
  • 苹果系统权限管理在哪找
  • win10专业版用户名和密码怎么取消
  • 偷渡系统可以正常接收到升级吗
  • 预收房租需要缴纳个税么
  • PHP:pg_set_client_encoding()的用法_PostgreSQL函数
  • thinkphp框架介绍
  • html的论文
  • 招待费专票可以抵扣进项吗
  • 按钮实现开关功能
  • 机票报销需要哪些才可以
  • 小规模纳税人季报需要报什么
  • php destruct
  • 农民工专用账户回执单
  • index.php备份文件
  • 资产负债表日后事项包括哪些
  • 个税中的免税收入都包括什么
  • 建筑公司租赁设备怎么入账
  • 罚款支出算费用吗
  • 企业持有住房税费
  • 公司注册资金抽走违法吗
  • 母子公司之间无偿划转固定资产
  • 社保缴费基数调整后对个人的影响
  • 双倍余额递减法计提折旧公式
  • 企业所得税虚报成本多少属于犯罪
  • 凭证过账的步骤
  • 结算金额和付款金额
  • 加油站如何开票
  • 工业企业无形资产有哪些
  • winds密码忘记了
  • 电脑2003系统
  • Linux查看磁盘剩余空间指令
  • 越狱免电脑
  • win8自启动在哪儿设置
  • javascript居中
  • unity怎么用
  • Django中login_required装饰器的深入介绍
  • jsp中onload事件
  • javascript基于
  • jquery自定义的方法有哪些
  • javascriptz
  • javastudio
  • 加强案件查办工作方案
  • 汽车票换票需要手续费吗
  • 服务类发票 如何入账
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设