Cuando se crean emails es habitual generar URL que dependen de la configuración
del enrutamiento. Afortunadamente la generación de URL también se ha simplificado
al máximo en Symfony 1.3 porque dentro de una tarea puedes acceder directamente
al enrutamiento de la aplicación actual con el método sfCommandApplicationTask::getRouting()
:
public function execute($arguments = array(), $options = array())
{
$routing = $this->getRouting();
}
Nota Como el enrutamiento depende de la aplicación, debes asegurarte de que la tarea tenga acceso a la configuración de la aplicación, ya que de otra forma no es posible generar URL con el sistema de enrutamiento.
Puedes leer la sección Opciones especiales para aprender cómo obtener dentro de una tarea la configuración de la aplicación automáticamente.
Ahora que se ha obtenido la instancia del enrutamiento, es muy sencillo generar
cualquier URL con el método generate()
:
public function execute($arguments = array(), $options = array())
{
$url = $this->getRouting()->generate('default', array('module' => 'foo', 'action' => 'bar'));
}
El primer argumento es el nombre de la ruta y el segundo argumento es un array
con los parámetros de la ruta. El código anterior genera una URL relativa, que
seguramente no es lo que queremos hacer. Desafortunadamente no es posible generar
URL absolutas dentro de una tarea porque no se dispone del objeto sfWebRequest
con el que obtener el host.
Una forma sencilla de evitar este problema consiste en definir el host dentro
del archivo de configuración factories.yml
:
all:
routing:
class: sfPatternRouting
param:
generate_shortest_url: true
extra_parameters_as_query_string: true
context:
host: example.org
El host se ha añadido como una opción llamada context_host
. Esta es la opción
que utiliza el enrutamiento al generar la URL absoluta:
public function execute($arguments = array(), $options = array())
{
$url = $this->getRouting()->generate('my_route', array(), true);
}