Dans une tache symfony, il est tout à fait possible de créer un contexte comme si l’on venait d’un appel http.
$configuration = ProjectConfiguration::getApplicationConfiguration($options['application'], $options['env'], false); $sf_context = sfContext::createInstance($configuration, 'raoul'); sfContext::switchTo('raoul');
Ceci fait, on pourrait imaginer appeler la fonction get_component présente dans PartialHelper.php histoire de générer le cache pour certains composants.
// charge le helper $configuration->loadHelpers('Partial'); get_component($moduleName, $componentName, $vars); // si le composant utilise du cache, le fichier de cache sera crée
Le probleme est que tous les appels à link_to ou image_tag vont générer des liens invalides. (avec des symfony/symfony dans les urls)
La solution que j’ai trouvée en regardant du coté de sfBrowserBase.class.php consiste à setter le tableau $_SERVER pour simuler complètement la navigation web. Il faut donc insérer les lignes suivantes avant la création du contexte :
unset($_SERVER['argv']); unset($_SERVER['argc']); $_SERVER['HTTP_HOST'] = $arguments['host']; $_SERVER['SCRIPT_NAME'] = $arguments['script_name']; $_SERVER['SERVER_NAME'] = $_SERVER['HTTP_HOST']; $_SERVER['SERVER_PORT'] = 80; $_SERVER['REQUEST_METHOD'] = 'GET';
Bien sur, il faut que votre task prenne host (par exemple ‘localhost’ pour vos test) et script_name (par exemple ‘/monalias/frontend.php’) en arguments.
Cela semble fonctionner dans mon cas. N’hésitez pas si vous avez des retours ou des remarques.