我正在尝试使用 Zend 路由器创建一个子域,然后为子域下的每个部分(例如 subdomain.site.com/section/)创建另一个路由,然后尝试将其链接到子域路由.但我不知道怎么做.我已经阅读了我能找到的所有文档和所有论坛,但它让我自己弄清楚了.到目前为止,我的尝试只会让我出现这个错误:
I am trying to create a subdomain using the Zend Router, and then for each section under a subdomain, such as subdomain.site.com/section/ I am creating another route and then trying to chain it to the subdomain route. but I don't know how. I have read all the documentation I could find and all the forums, but it leads me to figure it out on my own. So far, my attempts just get me this error:
可捕获的致命错误:参数 2 传递给Zend_Controller_Router_Rewrite::addRoute() 必须实现接口Zend_Controller_Router_Route_Interface, null 给定, 调用/var/local/zend/library/Zend/Controller/Router/Rewrite.php 第 155 行并定义在/var/local/zend/library/Zend/Controller/Router/Rewrite.php 第 93 行
Catchable fatal error: Argument 2 passed to Zend_Controller_Router_Rewrite::addRoute() must implement interface Zend_Controller_Router_Route_Interface, null given, called in /var/local/zend/library/Zend/Controller/Router/Rewrite.php on line 155 and defined in /var/local/zend/library/Zend/Controller/Router/Rewrite.php on line 93
使用以下代码:
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),其中 100% 的互联网示例都在其中.
I cannot find an example of how to do chaining this with an INI file anywhere on the net. The entire application is written in an INI for the routing config, so I can't switch it over to an array based config (or XML for that matter), in which 100% of the examples on the internet are in.
如果我可以用数组形式来做,我可以这样说:
If I could do it in array form, I could just say this:
$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 文件中执行上述操作有任何想法吗?
Does anyone have any ideas on how to do the above in an INI file?
这里基本上是你想要的,INI 格式:
Here's basically what you want, in INI format:
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-signup
和 b2b-anotherroute
.
This will give you the following routes: b2b-signup
, and b2b-anotherroute
.
这里有一些关于路由链接的重要说明:
Here's some important notes on route chaining:
将路由链接在一起时,外部路由的参数比内部路由的参数具有更高的优先级.因此,如果你在外部和内部路由中定义了一个控制器,则外部路由的控制器将被选中.
When chaining routes together, the parameters of the outer route have a higher priority than the parameters of the inner route. Thus if you define a controller in the outer and in the inner route, the controller of the outer route will be selected.
父/子链式路由名称总是用破折号连接!所以,就像上面的例子一样,b2b.chains.signup
变成了一个名为 b2b-signup
的路由(你可以用它来组装 URL,等等).
Parent / child chained route names are always concatenated with a dash! So, like in the example above, b2b.chains.signup
becomes a route named b2b-signup
(which you can use for URL assembly, etc).
你可以继续链接!链链可以有链.
You can keep chaining! Chains of chains can have chains.
链式路由的子级不能使用通配符.请参阅 #ZF-6654.这是博文谈论为什么这可能不是什么大问题.
Children of chained routes do not work with wildcards. See #ZF-6654. Here's blog post that talks about why that may not be a big deal.
这篇关于如何在路由 INI 文件中为 Zend Framework 中的子域编写路由链?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!