Php 如何在路由INI文件中为Zend Framework中的子域编写路由链?

Php 如何在路由INI文件中为Zend Framework中的子域编写路由链?,php,zend-framework,routing,subdomain,ini,Php,Zend Framework,Routing,Subdomain,Ini,我尝试使用Zend路由器创建子域,然后针对子域下的每个部分,例如subdomain.site.com/section/创建另一个路由,然后尝试将其链接到子域路由。但我不知道怎么做。我已经阅读了所有我能找到的文档和所有的论坛,但这让我自己想出来。到目前为止,我的尝试只是得到了以下错误: 可捕获致命错误:参数2传递给 Zend_控制器_路由器_重写::addRoute()必须实现接口 Zend_控制器_路由器_路由_接口,给定为空,在中调用 /第155行的var/local/zend/library

我尝试使用Zend路由器创建子域,然后针对子域下的每个部分,例如subdomain.site.com/section/创建另一个路由,然后尝试将其链接到子域路由。但我不知道怎么做。我已经阅读了所有我能找到的文档和所有的论坛,但这让我自己想出来。到目前为止,我的尝试只是得到了以下错误:

可捕获致命错误:参数2传递给 Zend_控制器_路由器_重写::addRoute()必须实现接口 Zend_控制器_路由器_路由_接口,给定为空,在中调用 /第155行的var/local/zend/library/zend/Controller/Router/Rewrite.php 定义于 /第93行的var/local/zend/library/zend/Controller/Router/Rewrite.php

使用以下代码:

routes.b2b.type = "Zend_Controller_Router_Route_Hostname"
routes.b2b.route = "sales.sitename.com"
routes.b2b.defaults.module = b2b
routes.b2b.defaults.controller = index
routes.b2b.defaults.action = index

routes.b2b_signup.type = "Zend_Controller_Router_Route_Static"
routes.b2b_signup.route = "/signup"
routes.b2b_signup.defaults.controller = "index"
routes.b2b_signup.defaults.action   = "signup"

routes.b2b_login.type = "Zend_Controller_Router_Route_Chain"
routes.b2b_login.chain = b2b_signup
我在网上的任何地方都找不到如何用INI文件链接的例子。整个应用程序都是在路由配置的INI中编写的,因此我无法将其切换到基于数组的配置(或XML),在这种配置中,internet上100%的示例都在

如果我可以用数组的形式,我可以这样说:

$hostnameRoute = new Zend_Controller_Router_Route_Hostname(
    'sales.sitename.com',
    array(
        'controller' => 'index',
        'module'     => 'b2b',
        'action'     => 'index'
    )
);

$hostnameRoute = new Zend_Controller_Router_Route_Static(
    '/signup',
    array(
        'controller' => 'index',
        'module'     => 'b2b',
        'action'     => 'signup'
    )
);
    $chainedRoute = new Zend_Controller_Router_Route_Chain();
    $chainedRoute->chain($b2b_signup)

有人对如何在INI文件中执行上述操作有什么想法吗?

以下是您基本上想要的INI格式:

routes.b2b.type = "Zend_Controller_Router_Route_Hostname"
routes.b2b.route = "sales.sitename.com"
; you could specify a default module (or anything) to use for the whole 
; route chain here, like so: 
; routes.b2b.defaults.module = "default"

routes.b2b.chains.signup.type = "Zend_Controller_Router_Route_Static"
routes.b2b.chains.signup.route = "/signup"
routes.b2b.chains.signup.defaults.controller = "index"
routes.b2b.chains.signup.defaults.action = "signup"

routes.b2b.chains.anotherroute.route = "/something/:foo" ; etc, etc.
routes.b2b.chains.anotherroute.defaults.action = "foo"
routes.b2b.chains.anotherroute.defaults.controller = "index"
routes.b2b.chains.anotherroute.defaults.foo = "bar"
routes.b2b.chains.anotherroute.reqs.foo = '[a-z]+'
这将为您提供以下路线:
b2b注册
,以及
b2b其他路线

以下是有关路线链接的一些重要注意事项:

将路由链接在一起时,外部路由的参数的优先级高于内部路由的参数。因此,如果在外部管线和内部管线中定义控制器,将选择外部管线的控制器

父/子链接路由名称始终用破折号连接!因此,就像上面的例子一样,
b2b.chains.signup
成为一个名为
b2b signup
的路由(可以用于URL组装等)


你可以继续锁链!链条的链条可以有链条


链接路由的子级不能使用通配符。看见这就是为什么这可能不是什么大问题。

这正是我想要的答案。自从我几个月前开始与ZF合作以来,你真的帮了我大忙,而在互联网上我几乎找不到(我猜直到这篇文章之前)描述如何在INI中实现这一点的内容。非常感谢你!你能为ZF推荐一些好书吗?不,很遗憾。我从未读过任何关于Zend框架的书(或书?)。也就是说,Rob Allen的Zend框架应该是好的。然而,由于采埃孚的快速发展,书籍很快就过时了;非常快。例如,该书中没有任何关于路由链、Zend_应用程序或Zend_工具的内容。“你可以继续链接!链链可以有链。”我想知道哪一种是正确的方法:1。路线。b2b。连锁。另一条路线。连锁。yetanotherroute。。。2.路线。另一条路线。锁链。yetanotherroute…我相信你的第一个例子是正确的,Kenji。