Действительно, маршрут регулярных выражений мог бы сработать.
Если по какой-либо причине вы не хотите использовать маршрут регулярных выражений, есть простой обходной путь через плагин фронт-контроллера:
//replace the :id and :title params with a single one, mapping them both
$newsroute = new Zend_Controller_Router_Route(
'news/:action/:article',
array( 'controller' => 'news' )
);
// in a front controller plugin, you extract the Id form the article param
function function dispatchLoopStartup( Zend_Controller_Request_Abstract $request ) {
if( $request->getParam( 'article', false ) ){
$slug = $request->getParam( 'article' );
$parts = array();
preg_match( '/^(\d+)/', $slug, $parts );
// add the extracted id to the request as if there where an :id param
$request->setParam( 'id', $parts[0] );
}
}
Конечно, вы также можете извлечь заголовок таким же образом, если вам это нужно.
Не забудьте создать параметр 'article', если вы хотите сгенерировать URL:
$this->url( array( 'article' => $id.'_'.$title ) );