Ver Mensaje Individual
  #7 (permalink)  
Antiguo 04/06/2011, 11:55
nerthalas
 
Fecha de Ingreso: noviembre-2010
Mensajes: 21
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Don´t repeat yourself (DRY). Dudas con la reutilización de controladores y

Cita:
Iniciado por masterpuppet Ver Mensaje
Es que te estas dando la respuesta,



como lo has dicho es como lo deberías hacer, el controller recibe por parámetro la marca, es mas como siempre vas a precisar una marca, te puedes hacer un plugin que al detectar el controller(MarcaController para tomar tu ejemplo) automáticamente busque la marca en la persistencia y la inyecte en el fc o bien en el controller.

Saludos.
Entiendo tu solución pero tengo ciertas lagunas sobre cómo aplicarla. Verás, yo había intentado resolver el problema creando el siguiente plug-in:

Código PHP:
class My_Controller_Plugin_ControllerCheck extends Zend_Controller_Plugin_Abstract
{
    public function 
preDispatch(Zend_Controller_Request_Abstract $request
    {
        
//Intercepta el nombre del controlador y su accion
        //Por ejemplo, al pinchar en el enlace
        // $this->url(array('controller'=>'opel', 'action'=>'index'))
        
        
$controllerName $this->getRequest()->getControllerName();
        
$actionName $this->getRequest()->getActionName();
        
        
//Array donde se almacenan los nombres de los controladores
        
$controladores = array('seat','opel','bmw','ford');
        
        
        
//Compruebo si el nombre del controlador está en el array
        //En caso positivo redirijo la $request al controlador genérico
        //pasándole como parámetro el nombre del controlador inicial,
        //por ejemplo, ('controller'=>'opel', 'action'=>'index')
        
if(in_array($controllerName$controladores)) {
            
$request->setControllerName('marca');
            
$request->setActionName('index');
            
$request->setParam('nombre'$controllerName);
        }
        
        
    }

¿Cuál es el problema? Que tan sólo recibe el parámetro con el nombre de la marca la acción Index, es decir, el resto de acciones no reciben nada. Entonces, dicho lo anterior, no sé muy bien cómo implementar la solución que propones.