Как интегрировать веб-сайт symfony с whmcs
Вопрос
Я пытаюсь найти способ интегрировать мой веб-сайт, закодированный с использованием Symfony, с моей биллинговой системой, WHMCS.
Первое, что я попробовал, это создать новый модуль symfony под названием whmcs, и в этом модуле я использовал ob_start / require_once / ob_get_contents для восстановления страницы, но это продолжало приводить к пустой странице без каких-либо ошибок в журналах или где-либо еще.Поскольку это все равно должно было стать кошмаром для навигации, я отказался от этой идеи.
Моя вторая идея состояла в том, чтобы воспользоваться преимуществами Система крючков WHMCS.До сих пор это работало, за исключением одной вещи.Я понятия не имею, как вызвать мой layout.php файл.Вот мой текущий код:
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");
Моя проблема здесь в том, что, хотя заголовок загружается, в нем нет ни meta, ни css, ни javascript.Эти настройки сохранены в файле my view.yml, и частичные файлы не загружают этот файл.
Мне нужно найти способ сделать что-то вроде echo get_layout("layout");
или echo get_methodaction("whmcs", "index");
Возможно, это что-то глупое, но я просматривал вики, форумы и свою книгу по symfony и просто не могу найти код, который мне нужно использовать.
Решение
В своем методе действия используйте:
$output = $this->getController()->getPresentationFor("module", "action");
Это преобразует выходные данные указанного модуля и действия в $output
;видеть http://www.symfony-project.org/api/1_2/sfController#method_getpresentationfor для подробностей
Другие советы
Попробуйте использовать 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;
Приведенный выше код отправляет запрос curl на URL-адрес $url
$query_string
это данные, которые вы собираетесь разместить на странице в случае необходимости
$query_string = "";
foreach ($postfields AS $k => $v)
$query_string .= "$k=" . urlencode($v) . "&";
$query_string = trim($query_string, '&');
где $postfields
представляет собой массив параметров для отправки
Дополнительно вы можете отправить междоменный ajax-запрос (если вы используете jQuery, вы просто устанавливаете $.ajax
вариант dataType
Для jsonp
) и это загрузило бы только содержательную часть действия (таблицы стилей и javascripts не включены)