在开发Web站点的时候,经常会碰到提供子域名的服务之类的问题,而在Zend Framework的开发过程中,所有的链接都会被重写到index.php上。这样在实现子域名的开发上就有些麻烦,但在Zend Framework 1.7中,在一个新的路由器专门用来处理子域名的映射,Zend_Controller_Router_Route_Hostname。她的工作原理是这样的:
首页通过Zend_Controller_Router_Route_Hostname规则找到相对应的域名,根据域名你可以产生相关变量,如:控制器名称;用户ID等。这找到相对应的规则后,再对路径进行了路由规则进行匹配。就是说通过两次路由规则找到相对应的参数
假如有这样一个地址,gonefish.users.example.com/profile。创建如下规则:
$hostnameRoute = new Zend_Controller_Router_Route_Hostname(
‘:username.users.example.com’,
array(
‘controller’ => ‘profile’,
‘action’ => ‘userinfo’
)
);
$plainPathRoute = new Zend_Controller_Router_Route_Static(”);
$plainPathRoute2 = new Zend_Controller_Router_Route(
‘profile’,
array(
‘action’ => ‘profile’
),
);
$router->addRoute(‘user’, $hostnameRoute->chain($plainPathRoute);
$router->addRoute(‘user’, $hostnameRoute->chain($plainPathRoute2);
第一种情况:访问gonefish.users.example.com。首先,路由系统先匹配gonefish.users.example.com域名,找到了控制名和动作名;然后再对后面的路径进行一次规则匹配,因为没有其它路径了,所以应用的是$plainPathRoute1路由规则。
第二种情况:访问gonefish.users.example.com/profile。首先,路由系统先匹配gonefish.users.example.com域名,找到了控制名和动作名;然后再对路径profile进行一次规则匹配,这样更新了动作名,即$plainPathRoute2的路由规则。
通过对访问地址进行两次路由规则的匹配来映射最终访问的方法。