Zend Router различные URL - PullRequest
1 голос
/ 07 мая 2010

Я бы хотел добиться чего-то подобного с ZF роутером. ('controller' => 'products', 'action' => 'index')

//Show product details   
'http://mydomain.com/en/products/category-1/subcategory-3/product-name.htm'

//List products in subcategory-3
'http://mydomain.com/en/products/category-1/subcategory-3.htm'

//List products in category-1
'http://mydomain.com/en/products/category-1.htm'

//List products in all categories
'http://mydomain.com/en/products.htm'

Нужно ли указывать каждую возможность как отдельный маршрут? Или есть лучшее решение? (С использованием Route_Regex?)

1 Ответ

1 голос
/ 07 мая 2010

Вы можете получить маршрут, чтобы приблизить это, имея пустые значения по умолчанию, например:

resources.router.routes.products.route = ":lang/products/:category/:subcategory/:product"
resources.router.routes.products.defaults.category=""  
resources.router.routes.products.defaults.subcategory=""       
resources.router.routes.products.defaults.product=""
resources.router.routes.products.defaults.controller="products"
resources.router.routes.products.defaults.action="index"

Этот маршрут не будет обрабатывать ваше расширение .htm на /en/products.htm, и к категории / подкатегории / продукту может добавляться .htm к их значениям. Вероятно, легче справиться с извлечением .htm из запроса с помощью небольшого волшебства .htaccess RewriteRule, чем обходить его с помощью базового Zend_Router)

 RewriteRule /([^/]+)/products(.*)\.htm /$1/products$2

Альтернативой может быть использование маршрута с пользовательским или регулярным выражением

...