Problemas frecuentes en symfony

Posted by andnovar on Jun 18, 2009 in Uncategorized |

¿Como hago para direccionar desde un modulo en una aplicacion a un modulo de otra aplicacion en symfony 1.2?

Dado que en versiones anteriores no lo he probado, no puedo asegurar que este método funcione en versiones anteriores a 1.2, bueno, ahora si empecemos:

  1. Copiar este codigo dentro de la clase TuAppOrigenConfiguration.class.php

protected $enrutamientoFrontend = null;

public function generaUrlFrontend($nombre, $parametros = array())
{
sfConfig::add(array(‘sf_webroot_dir’ => ‘/nombreProyecto/web’));

$ruta = ‘http://’.$_SERVER[‘HTTP_HOST’].sfConfig::get(‘sf_webroot_dir’).’/’.sfConfig::get(‘app_controller_backend’);
return $ruta.$this-> getEnrutamientoFrontend()->generate($nombre, $parametros);
}

public function getEnrutamientoFrontend()
{
if (!$this->enrutamientoFrontend)
{
$this->enrutamientoFrontend= new sfPatternRouting(new sfEventDispatcher());

$configuracion = new sfRoutingConfigHandler();
$rutas = $configuracion->evaluate(array(sfConfig::get(‘sf_apps_dir’).’/nombreAppOrigen/config/routing.yml’));
$this->enrutamientoFrontend->setRoutes($rutas);
}

return $this->enrutamientoFrontend;
}

Ademas en el action de la aplicacion origen ponemos lo sgte:

$this->redirect($this->getContext()->getConfiguration()->generaUrlFrontend(‘ingreso_admin’));

Ahora explicaremos las lineas mas importantes que son las que deben cambiar deacuerdo a sus proyectos

  • generaUrlFrontend($nombre, $parametros = array())

Esta funcion recibe dos parametros, el primero es el nombre de la opcion de configuracion del archivo routing.yml de la aplicacion origen, y el segundo parametro es un arreglo de parametros en caso de que deseemos enviarle al modulo de la otra aplicacion.

  • sfConfig::add(array(‘sf_webroot_dir’ => ‘/nombreProyecto/web’));

En esta linea se define la ruta del proyecto hecho en symfony y se la almacena en sf_webroot_dir. Esta ruta («/nombreProyecto/web») se debe cambiar y poner la ruta hacia la carpeta web del proyecto propio, tomando en cuenta que esta se la debe poner desde la carpeta del servidor web, otro ejemplo seria poner «PHP5/proyecto/web», que es para las personas que tienen instalado php, apache y el MDBD por separado.

  • $ruta = ‘http://’.$_SERVER[‘HTTP_HOST’].sfConfig::get(‘sf_webroot_dir’);

En esta linea se define toda la ruta absoluta hacia la carpeta web de la otra aplicacion, podriamos ponerlo estatico, es dcir poner algo como «http://localhost/nombreProyecto/web/», pero dado que esta ruta por lo general la queremos de forma dinamica, lo hacemos de esta forma, ademas que mediante esto podemos facilmente pasar el proyecto a otra maq con otra estructura y no tendriamos problemas de directorios, ya que consultamos el servidor web que estemos utilizando y le agregamos la ruta de la carpeta web del proyecto que la guardamos en en el punto anterior.

  • sfConfig::get(‘app_controller_backend’)

Con esto obtenemos el nombre de la aplicacion a la cual queremos redireccionar, este nombre se lo debe configurar en el archivo app.yml de la aplicacion origen.

Este era el contenido de mi archivo app.yml, esto variara segun los nombres de las aplicaciones de ustedes:

prod:
controller:
frontend: frontend.php
backend:  index.php
dev:
controller:
frontend: frontend_dev.php
backend:  admin_dev.php

  • $configuracion->evaluate(array(sfConfig::get(‘sf_apps_dir’).’/nombreAppOrigen/config/routing.yml’))
  • $this->redirect($this->getContext()->getConfiguration()->generaUrlFrontend(‘ingreso_admin’));

Bien, ya tenemos «http://servidor/nombreProyecto/web», pero falta el nombre de la accion a la cual nos queremos dirigir. Estas lineas son para eso, para consultar el nombre de la accion a la cual nos queremos dirigir. La segunda linea nos indica el nombre de la opcion de configuracion del archivo routing.yml en donde obtenemos el nombre de la accion a ejecutar, mientras que en la primera linea le decimos en que directorio se encuentra este archivo routing.yml.

En mi caso tenia configurado el routing.yml de esta forma:

homepage:
url:   /
param: { module: default, action: index }

default_index:
url:   /:module
param: { action: index }

ingreso_admin:
url:   /:
param: { module: default }

default:
url:   /:module/:action/*

Con estos pocos pasos ya deberian poder moverse entre aplicaciones….

Reply


Copyright © 2024 Tecnologías Interesantes All rights reserved. Theme by Laptop Geek.