Search code examples
zend-frameworkzend-controller-router

Language as subdomain with Zend 1.9


I am playing with Zend 1.9 and would like to have the language parameter as subdomain.

Like : http://en.site.com

Is it possible to get the language in .htaccess and set it to an environment variable which I can use in Zend ?

What is the best way to achieve what I want ?

-- added --:

I added this into my routes.ini :

[routes]

routes.lif.type = "Zend_Controller_Router_Route_Hostname"
routes.lif.route = ":language.domain.:tld"
routes.lif.reqs.language= "[a-z]{2}"
routes.lif.defaults.controller = "index"
routes.lif.defaults.action = "index"
routes.lif.defaults.language = "en"

; default
routes.lif.chains.default.type = "Zend_Controller_Router_Route"
routes.lif.chains.default.route = "/:controller/:action"
routes.lif.chains.default.defaults.controller = index
routes.lif.chains.default.defaults.action = index

; register
routes.lif.chains.register.type = "Zend_Controller_Router_Route"
routes.lif.chains.register.route = "/register"
routes.lif.chains.register.defaults.controller = "register"
routes.lif.chains.register.defaults.action = "newuser"

; details
routes.lif.chains.band.type = "Zend_Controller_Router_Route"
routes.lif.chains.band.route = "/details/:name"
routes.lif.chains.band.defaults.controller = "details"
routes.lif.chains.band.defaults.action = "getdetails"

This is working well if I go to : http://en.domain.com/details/joe But unfortunatly if I remove subdomain : http://domain.com/details/joe the default action is not called and I get

Message: Action "joe" does not exist and was not trapped in __call()

Do you have an idea ?

Thanks guys.

Thierry


Solution

  • You're in luck - there's a Zend_Controller_Router_Route_Hostname which can be used instead for exactly this purpose. If you want to achieve custom routing in the part after your domain, you'll need to take a look at Zend_Controller_Router_Route_Chain.