Você ja deve ter percebido que o padrão de url que o ZF utiliza para passar parametros não é muito amigavel para o usuário. Mas, como todo bom framework, existe como corrigir isso utilizando rotas.
Adicione as seguintes linhas de códigos para testar as rotas:
Iniciando
$this->_front = Zend_Controller_Front::getInstance();
$router = $this->_front->getRouter();
Esse código deve ser adicionado no plugin de inicialização do seu sistema (ou no bootstrap, para casos que não o utilizem).
Com o objeto $router em mãos, vamos aos exemplos práticos:
1. Rota simples, sem parâmetros
$route = new Zend_Controller_Router_Route('rota/nova', array(
'module'=>'default',
'controller' => 'noticias',
'action'=> 'index')
);
$router->addRoute('default.noticias.index', $route);
para entender melhor esse código, o primeiro parametro é a rota que você vai criar, nesse caso ficaria: http://www.seudominio.com.br/rota/nova os outros parametros são o módulo/controller/action que serão executados. A ultima linha de código é aonde a rota é efetivamente incluida no sistema.
2. Rota simples, com parâmetros
$route = new Zend_Controller_Router_Route('usuario/:user', array(
'module'=> 'default',
'controller' => 'usuario',
'action'=> 'visualizar')
);
$router->addRoute('default.usuario.visualizar', $route);
O funcionamento é exatamente igual a anterior, com exceção que agora o que vier depois de “usuario” será passado como parametro.
3. Rota com expressão regular
$route = new Zend_Controller_Router_Route_Regex('produto/([0-9]+)',array(
'module'=> 'default',
'controller' => 'produtos',
'action' => 'detalhes'),
array("id" => 1)
);
$router->addRoute('default.produtos.detalhes', $route);
Já deve ter percebido que aonde voce define a rota, existe uma expressão regular entre parenteses. Ela será o nosso parametro agora (que está contido em “id”) conforme foi atribuido no array seguinte.
Pegando os parâmetros
No controller, utilize:
$this->_getParam("nome_parametro")
Simples e funcional ^^