Comment intégrer un site de symfony avec whmcs
Question
Je suis en train de trouver un moyen d'intégrer mon site Web, codé en utilisant Symfony avec mon système de facturation, WHMCS .
La première chose que j'ai essayé était de créer un nouveau module symfony appelé whmcs et dans ce module, j'utilisais ob_start / require_once / ob_get_contents pour récupérer la page, mais il a gardé pour résultat une page blanche, sans aucune erreur dans les journaux ou partout autre. Depuis que cela allait être un cauchemar de navigation de toute façon, j'ai renoncé à cette idée.
Ma deuxième idée était de profiter de la WHMCS crochets système . Jusqu'à présent, cela a fonctionné, sauf pour une chose. Je ne sais pas comment appeler mon dossier layout.php. Voici mon code actuel:
function getSymfonyLayout()
{
require_once($_SERVER['DOCUMENT_ROOT'].'/../config/ProjectConfiguration.class.php');
$configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'prod', true);
$context = sfContext::createInstance($configuration);
$context->getRequest()->setRelativeUrlRoot('');
$context->getInstance()->getConfiguration()->loadHelpers('Partial');
echo get_partial("global/header");
}
add_hook("ClientAreaPage",1,"getSymfonyLayout");
Mon problème ici est que, alors que l'en-tête ne se charge, il n'y a pas de méta, pas css, javascript pas. Ces paramètres sont enregistrés dans mon fichier view.yml et partials ne chargent pas ce fichier.
Je dois trouver un moyen de faire quelque chose comme echo get_layout("layout");
ou echo get_methodaction("whmcs", "index");
Il est probablement quelque chose de stupide, mais je l'ai été à travers les wikis, va forums et mon livre Symfony et je ne peux pas trouver le code que je dois utiliser.
La solution
Dans votre méthode d'action, utilisez:
$output = $this->getController()->getPresentationFor("module", "action");
Ceci rendra la sortie du module et de l'action spécifiée dans $output
; voir http://www.symfony-project.org/api/1_2/sfController #method_getpresentationfor pour plus de détails
Autres conseils
Essayez d'utiliser boucle
$url = 'your symfony url';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $query_string);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$data = curl_exec($ch);
echo $data;
Le code envoie ci-dessus une demande à la boucle $url
url
$query_string
est les données que vous allez poster sur la page si nécessaire
$query_string = "";
foreach ($postfields AS $k => $v)
$query_string .= "$k=" . urlencode($v) . "&";
$query_string = trim($query_string, '&');
où $postfields
est un tableau des paramètres à envoyer
En outre, vous pouvez envoyer une demande de paiement ajax inter-domaine (si vous utilisez jQuery vous définissez simplement l'option $.ajax
dataType
à jsonp
) et que chargeriez seule la partie du contenu de l'action (feuilles de style et javascripts ne sont pas inclus)