Ver Mensaje Individual
  #10 (permalink)  
Antiguo 06/06/2011, 06:52
Avatar de masterpuppet
masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Don´t repeat yourself (DRY). Dudas con la reutilización de controladores y

A ver, creo que no me has entendido bien, es 1 controller para manejar las marcas y pasas como parámetro en la uri la marca.

view
Código HTML:
Ver original
  1. <li>
  2.     <a href="<?php echo $this->url(array(
  3.                                         'controller' => 'vendors',
  4.                                         'name' => 'opel')); ?>" >Opel</a>
  5. </li>  
  6. <li>
  7.     <a href="<?php echo $this->url(array(
  8.                                         'controller' => 'vendors',
  9.                                         'name' => 'seat')); ?>" >Seat</a>
  10. </li>

controller

Código PHP:
Ver original
  1. class VendorsController extends Zend_Controller_Action
  2. {
  3.              
  4.     public function init()
  5.     {}
  6.  
  7.     public function indexAction()
  8.     {
  9.         $vendor = $this->_getParam('name');
  10.         $this->view->vendor = $vendor;      
  11.     }
  12.      
  13.     ...
  14.  
  15. }

en tu caso como en todas las acciones tienes que controlar la marca, puedes hacer un plugin que la cargue y sete al FrontController|Request el modelo, es una forma de resolverlo, puedes tambien hacerlo en cada uno de los actions, en el preDispatch, el init, hay muchas formas de resolverlo, si fuera un plugin, podria ser algo asi:

Código PHP:
Ver original
  1. class My_Controller_Plugin_VendorLoader extends Zend_Controller_Plugin_Abstract
  2. {
  3.     public function preDispatch(Zend_Controller_Request_Abstract $request)  
  4.     {          
  5.         $controller = strtolower($request->getControllerName());       
  6.         if('vendor' == $controller) {
  7.             $service = My_Service_Abstract::load('Vendor');
  8.             $vendor  = $service->find($request->getParam('name'));
  9.             if(false === $vendor) {
  10.                 throw new VendorNotFoundException();
  11.             }          
  12.             $fc = Zend_Controller_Front::getInstance();            
  13.             $fc->setParam('vendor', $vendor);
  14.         }                
  15.     }
  16. }

luego en el controller en vez de obtener el name, obtienes directamente el modelo

Código PHP:
Ver original
  1. public function indexAction()
  2. {
  3.     $vendor = $this->_getParam('vendor');
  4.     $this->view->vendor = $vendor;      
  5. }

esto te va a generar url mas largas, algo asi:

project.local/vendors/index/name/seat
project.local/vendors/info/name/seat
project.local/vendors/gallery/name/seat

y ahi es donde entra en juego el router, lo que te comento GatorV, para hacer seo url's, y que queden mas o menos así:

project.local/vendors/seat
project.local/vendors/seat/info
project.local/vendors/seat/gallery

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)