最近在配置zend的路由,需要根据不同的二级域名进行权限控制。其中使用到了Zend_Controller_Router_Route_Hostname这个路由。并使用了路由链,配置代码如下:
routes.hostname.type = "Zend_Controller_Router_Route_Hostname"
routes.hostname.route = ":instance"
routes.hostname.chains.static.route = ":action"
routes.hostname.chains.static.defaults.controller = index
routes.hostname.chains.objects.type = "Zend_Controller_Router_Route_Regex"
routes.hostname.chains.objects.route = "([a-z]+(?:-[a-z]+)?)s(?:/([a-z]+)?)?"
routes.hostname.chains.objects.defaults.action = list
routes.hostname.chains.objects.map.1 = "controller"
routes.hostname.chains.objects.map.2 = "action"
routes.hostname.chains.objects.reverse = "%ss/%s"
routes.hostname.chains.object.type = "Zend_Controller_Router_Route_Regex"
routes.hostname.chains.object.route = "([a-z]+(?:-[a-z]+)?)s/([0-9a-f]{32})(?:/([a-z]+))?"
routes.hostname.chains.object.defaults.action = view
routes.hostname.chains.object.map.1 = "controller"
routes.hostname.chains.object.map.2 = "id"
routes.hostname.chains.object.map.3 = "action"
routes.hostname.chains.object.reverse = "%ss/%s/%s"
routes.hostname.chains.children.type = "Zend_Controller_Router_Route_Regex"
routes.hostname.chains.children.route = "((?:[a-z]+s/[1-9]\d*/)*)([a-z]+(?:-[a-z]+)?)s/([0-9a-f]{32})/([a-z]+(?:-[a-z]+)?)s(?:/([a-z]+))?"
routes.hostname.chains.children.defaults.action = list
routes.hostname.chains.children.map.1 = "ancestors"
routes.hostname.chains.children.map.2 = "parent_cls"
routes.hostname.chains.children.map.3 = "parent_id"
routes.hostname.chains.children.map.4 = "controller"
routes.hostname.chains.children.map.5 = "action"
routes.hostname.chains.children.reverse = "%s%ss/%s/%ss/%s"
发现程序中生成的url的端口号全部丢失。仔细看代码源码发现Zend_Controller_Router_Route_Chain中的assemble方法
public function assemble($data = array(), $reset = false, $encode = false)
{
$value = '';
foreach ($this->_routes as $key => $route) {
if ($key > 0) {
$value .= $this->_separators[$key];
}
$value .= $route->assemble($data, $reset, $encode);
if (method_exists($route, 'getVariables')) {
$variables = $route->getVariables();
foreach ($variables as $variable) {
$data[$variable] = null;
}
}
}
return $value;
}
循环调用路由,但是在Zend_Controller_Router_Route_Hostname中的match方法中
// Get the host and remove unnecessary port information
$host = $request->getHttpHost();
if (preg_match('#:\d+$#', $host, $result) === 1) {
$host = substr($host, 0, -strlen($result[0]));
}
这段去掉了端口号,而Zend_Controller_Router_Route_Chain中有将这里返回的url与后面的url拼接,这样产生的url端口自然就丢失了。不知道当时作者为什么要这样写,是不是因为有其他的原因?返回带端口的url有何不可?希望对PHP熟悉的人给予解释。
分享到:
- 2009-03-26 15:58
- 浏览 1187
- 评论(0)
- 论坛回复 / 浏览 (0 / 2528)
- 查看更多
相关推荐
主要介绍了Zend Framework教程之路由功能Zend_Controller_Router,详细分析了路由功能Zend_Controller_Router的原理,使用技巧与相关注意事项,需要的朋友可以参考下
在标签中,"route router"和"tra_trace_trace router"进一步强调了与路由和追踪相关的主题。这些标签可能用于分类或搜索,便于用户找到这个程序。 在压缩包的文件名列表中,我们看到以下几个关键文件: 1. `tracer...
通过 `Zend_Controller_Router` 和 `Zend_Controller_Router_Route` 类,你可以创建自定义路由规则,以满足不同应用场景的需求。 5. **视图(Views)** 视图负责呈现应用程序的数据。`Zend_View` 类提供了一种模板...
5. **路由与调度**:Zend_Controller_Front 负责请求的接收和分发,而 Zend_Controller_Router 和 Zend_Controller_Dispatcher 则负责路由配置和控制器的调用,使得 URL 映射和处理更加灵活。 6. **视图助手**:...
通过 `Zend_Controller_Router` 和 `Zend_Controller_Dispatcher`,系统能够智能地路由请求到正确的模块。 ### 视图(View) 视图主要由一系列模板文件组成,用于呈现数据。`Zend_View` 类提供了一种机制,可以将...
8. **路由和调度(Routing and Dispatching)**:Zend_Controller_Front 负责接收请求并调度到相应的控制器和动作,而 Zend_Controller_Router 和 Zend_Controller_Dispatcher 处理 URL 路由和请求分发。 9. **国际...
1812w__integrated_services_router_wireless
- **路由和调度**:`Zend_Controller_Router` 和 `Rewrite` 负责解析 URL 并调度到相应的控制器和动作。 - **表单处理**:`Zend_Form` 支持创建复杂的表单,包含验证、过滤和装饰器功能。 - **缓存**:`Zend_Cache` ...
2. **路由和调度**:`Zend_Controller_Router` 和 `Zend_Controller_Front` 负责路由和调度请求,可以设置过滤规则,防止非法访问。 3. **访问控制**:通过 `Zend_Acl` (访问控制列表)实现角色基
Zend_Controller_Router_Route_Static 7.5.6.3. Zend_Controller_Router_Route_Regex 7.5.7. 使用 Zend_Config with the RewriteRouter 7.5.8. Subclassing the Router 7.6. 分发器 7.6.1. 概述 7.6.2. 子类...
Vue__Vuex__VueRouter_相关项目源代码阅读总结_Vue_source_code
Using Linux As A Router
通过 Zend_Controller_Router_Route 和 Zend_Rest_Server 类,开发者可以轻松地创建和消费 REST API,促进前后端分离和微服务架构的发展。 **表单处理** Zend_Form 是处理 HTML 表单的强大工具,它可以自动生成...
This is RTL of Router by uisng verilog
1584374652716972_com.xiaomi.router.apk
标题中的"ospfd.rar_ospf_abr_ospfd_router_the code"暗示了这是一个与OSPF(开放最短路径优先)路由协议相关的源代码压缩包,重点在于ABR(Area Border Router,区域边界路由器)和ospfd路由器。ospfd通常是实现...
2. **多端口接口**:路由器通常有多个输入和输出端口,每个端口可能有不同的速率和协议,FIFO可以缓解这种速率不匹配的问题。 3. **流量控制**:通过FIFO,路由器可以实施简单的流量控制策略,防止输入数据过快导致...
总的来说,"router_eSIM_v1 Flash 模拟器"是学习和练习Cisco路由器配置的宝贵工具,结合配置命令和示例,以及图像辅助,可以帮助用户快速掌握路由器操作和网络配置的核心技能。对于CCNA的学习者,熟练掌握这些知识是...