zend-framework - model zend framework 2
Cómo enrutar el subdominio múltiple con el nombre de host del enrutador zend (1)
Necesito crear un enrutamiento en Zend para simplemente copiar la estructura actual de la url del sitio en vivo que es tristemente inconsistente
Lo que quiero hacer es enrutar el subdominio de la siguiente manera:
www.site.com -> enrutador estático
a.site.com & b.site.com -> controlador de categoría
c.site.com y d.site.com -> controlador de ubicación
el resto del subdominio -> controlador de usuario
¿Alguien podría guiarme cómo resolver esto, gracias?
ACTUALIZAR:
Primero gracias Fge, vote su respuesta, funciona pero necesito más consejos:
Como tengo muchos subdominios para cada regla, hay una manera mejor que agregar las reglas en el bucle.
foreach ($ subdomains as $ a) {$ tr = new Zend_Controller_Router_Route_Hostname ("$ a.site.com", array (''module'' => ''mod'', ''controller'' => ''ctrl'', ''param_1'' => $ un )); $ router-> addRoute ($ a, $ tr); }
¿Cómo combinarlo con otro tipo de enrutamiento para analizar los parámetros (¿encadenado?), Algo como http://a.site.com/:b/:c , quiero analizarlo param_1 (a), param_2 (b) , param_2 (c)
Nota: Coincidencia inversa
Las rutas se hacen coincidir en orden inverso, así que asegúrese de que sus rutas más genéricas se definan primero.
Por lo tanto, primero debe definir la ruta para todos los otros subdominios, luego los específicos:
$user = new Zend_Controller_Router_Route_Hostname(
'':subdomain.site.com'',
array(
''controller'' => ''user''
)
);
$location1 = new Zend_Controller_Router_Route_Hostname(
''c.site.com'',
array(
''controller'' => ''location''
)
);
$location1 = new Zend_Controller_Router_Route_Hostname(
''d.site.com'',
array(
''controller'' => ''location''
)
);
// other definitions with known subdomain
$router->addRoute($user); // most general one added first
$router->addRoute($location1);
$router->addRoute($location2);
// add all other subdomains
Actualización para la pregunta actualizada:
1) Esto realmente depende de cuán diferentes sean los parámetros a los que desea enrutar un subdominio. En su ejemplo, los enruta a todos al mismo modelo y controlador y agrega el subdominio real como parámetro. Esto se puede hacer fácilmente con la ruta de usuario publicada anteriormente. Allí el subdominio se establece como parámetro de subdominio ( $request->getParam("subdomain")
). Si desea que los subdominios sean la acción de un controlador / modelo conocido, puede reemplazar :subdomain
con :action
. Pero tan pronto como tenga otros controladores / modelos para cada subdominio, me da miedo que tenga que pasarlos por encima (o usar un archivo de configuración). Para el ejemplo que proporcionó en la pregunta, la ruta simplemente podría verse así:
$user = new Zend_Controller_Router_Route_Hostname(
'':param1.site.com'',
array(
''controller'' => ''user''
)
);
// routes "subdomain".site.com to defaultModul/userController/indexAction with additional parameter param1 => subdomain.
Siempre que no tenga ningún esquema en sus subdominios, es muy difícil enrutarlos de una manera general.
2) Ese es un ejemplo donde las cadenas de enrutadores entran en juego. La ruta externa sería la ruta del nombre de host que maneja el subdominio y la ruta interna manejaría la parte :a/:b
. Esto podría verse así por ejemplo:
$user->chain(new Zend_Controller_Router_Route('':a/:b''));