簡體   English   中英

如何在路由INI文件中為Zend Framework中的子域編寫路由鏈?

[英]How do I write Routing Chains for a Subdomain in Zend Framework in a routing INI file?

我正在嘗試使用Zend路由器創建子域,然后為子域下的每個部分創建子域,例如subdomain.site.com/section/我正在創建另一個路由,然后嘗試將其鏈接到子域路由。 但我不知道怎么做。 我已經閱讀了所有可以找到的文檔和所有論壇,但它讓我自己弄清楚了。 到目前為止,我的嘗試只是給我這個錯誤:

可捕獲的致命錯誤:傳遞給Zend_Controller_Router_Rewrite :: addRoute()的參數2必須實現接口Zend_Controller_Router_Route_Interface,null給定,在第155行的/var/local/zend/library/Zend/Controller/Router/Rewrite.php中調用,並在/ var中定義第93行/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),其中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-signupb2b-anotherroute

這里有一些關於路由鏈的重要說明:

將路由鏈接在一起時,外部路由的參數優先級高於內部路由的參數。 因此,如果在外部路徑和內部路徑中定義控制器,則將選擇外部路徑的控制器。

父/子鏈接的路由名稱始終與短划線連接! 因此,與上面的示例一樣, b2b.chains.signup成為名為b2b-signup的路由(可用於URL組裝等)。

你可以繼續鏈接! 鏈條鏈可以有鏈子。

鏈式路線的孩子不能使用通配符。 #ZF-6654 這篇博客文章討論了為什么這可能不是什么大問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM