Come integrare un sito di symfony con WHMCS
Domanda
Sto cercando di trovare un modo per integrare il mio sito web, codificato utilizzando Symfony con il mio sistema di fatturazione, WHMCS .
La prima cosa che ho provato è stata la creazione di un nuovo modulo symfony ha chiamato WHMCS e in quel modulo, mi stava usando ob_start / require_once / ob_get_contents retreive la pagina, ma ha mantenuto causando una pagina vuota, senza alcun errore nei registri o dovunque altro. Dal momento che questo sarebbe stato un incubo di navigazione in ogni caso, ho rinunciato a questa idea.
La mia seconda idea era quella di sfruttare la WHMCS aggancia sistema . Finora, ha funzionato tranne una cosa. Non ho idea di come chiamare il mio file layout.php. Qui è il mio codice corrente:
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");
Il mio problema è che, mentre l'intestazione fa carico, non v'è alcuna meta, no css, javascript. Queste impostazioni vengono salvate nel mio file view.yml e parziali non caricare il file.
Ho bisogno di trovare un modo per fare qualcosa di simile echo get_layout("layout");
o echo get_methodaction("whmcs", "index");
E 'probabilmente qualcosa di stupido, ma mi è stato andando attraverso wiki, forum e il mio libro di symfony e non riesco proprio a trovare il codice che ho bisogno di usare.
Soluzione
Nel vostro metodo di azione, utilizzare:
$output = $this->getController()->getPresentationFor("module", "action");
Questo renderà l'uscita del modulo specificato ed azione in $output
; vedi http://www.symfony-project.org/api/1_2/sfController #method_getpresentationfor per i dettagli
Altri suggerimenti
Prova a usare curl
$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;
Il codice sopra invia una richiesta di ricciolo alla $url
url
$query_string
è il dato che si sta per inviare la pagina, se necessario
$query_string = "";
foreach ($postfields AS $k => $v)
$query_string .= "$k=" . urlencode($v) . "&";
$query_string = trim($query_string, '&');
dove $postfields
è un array di parametri da inviare
Inoltre è possibile inviare una richiesta AJAX croce dominio (se si sta utilizzando jQuery è sufficiente impostare l'opzione $.ajax
dataType
a jsonp
) e che sarebbe caricare solo la parte contenuto dell'azione (fogli di stile e JavaScript non sono inclusi)