Pergunta

Estou tentando encontrar uma maneira de integrar meu site, codificado usando o Symfony com meu sistema de cobrança, WHMCS.

A primeira coisa que tentei foi criar um novo módulo Symfony chamado WHMCS e, nesse módulo, eu estava usando OB_START/requer_once/ob_get_contents para recuperar a página, mas continuou resultando em uma página em branco, sem nenhum erro nos logs ou em qualquer outro lugar. Como seria um pesadelo de navegação de qualquer maneira, desisti dessa ideia.

Minha segunda ideia era tirar vantagem do Sistema de ganchos WHMCS. Até agora, funcionou, exceto por uma coisa. Não tenho ideia de como chamar meu arquivo layout.php. Aqui está meu código atual:

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");

Meu problema aqui é que, embora o cabeçalho carregue, não há meta, nem CSS, nem JavaScript. Essas configurações são salvas no meu arquivo view.yml e parciais não carregam esse arquivo.

Eu preciso encontrar uma maneira de fazer algo como echo get_layout("layout"); ou echo get_methodaction("whmcs", "index");

Provavelmente é algo bobo, mas eu tenho percorrido wikis, fóruns e meu livro de Symfony e não consigo encontrar o código que preciso usar.

Foi útil?

Solução

Em seu método de ação, use:

$output = $this->getController()->getPresentationFor("module", "action");

Isso renderizará a saída do módulo e ação especificados em $output; Vejo http://www.symfony-project.org/api/1_2/sfcontroller#method_getPresentationfor para detalhes

Outras dicas

Tente usar o 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;

O código acima envia uma solicitação de curl para o URL $url

$query_string são os dados que você vai postar na página, se necessário

$query_string = "";
foreach ($postfields AS $k => $v)
    $query_string .= "$k=" . urlencode($v) . "&";

$query_string = trim($query_string, '&');

Onde $postfields é uma matriz dos parâmetros para enviar adicionalmente, você pode enviar uma solicitação de Ajax de domínio cruzado (se você estiver usando o jQuery, basta definir o $.ajax opção dataType para jsonp) e isso carregaria apenas a parte do conteúdo da ação (folhas de estilo e javascripts não estão incluídas)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top