<?php 
 
namespace Jaxon\AjaxBundle; 
 
use Symfony\Component\HttpFoundation\Response as HttpResponse; 
use Symfony\Component\HttpKernel\KernelInterface; 
use Twig\Environment as TemplateEngine; 
use Psr\Log\LoggerInterface; 
 
class Jaxon 
{ 
    use \Jaxon\Features\App; 
 
    /** 
     * The template engine 
     * 
     * @var EngineInterface 
     */ 
    // protected $template; 
 
    /** 
     * Create a new Jaxon instance. 
     * 
     * @param KernelInterface       $kernel 
     * @param LoggerInterface       $logger 
     * @param TemplateEngine        $template 
     * @param array                 $config 
     */ 
    public function __construct(KernelInterface $kernel, 
        LoggerInterface $logger, TemplateEngine $template, array $config) 
    { 
        // The application URL 
        $sJsUrl = \array_key_exists('SERVER_NAME', $_SERVER) ? 
            '//' . $_SERVER['SERVER_NAME'] . '/jaxon/js' : '/jaxon/js'; 
        // The application web dir 
        $sJsDir = \array_key_exists('DOCUMENT_ROOT', $_SERVER) ? 
            '//' . $_SERVER['DOCUMENT_ROOT'] . '/jaxon/js' : 
            \rtrim($kernel->getProjectDir(), '/') . '/public/jaxon/js'; 
        // Export and minify options 
        $bExportJs = $bMinifyJs = !$kernel->isDebug(); 
 
        $jaxon = jaxon(); 
        $di = $jaxon->di(); 
 
        $viewManager = $di->getViewManager(); 
        // Set the default view namespace 
        $viewManager->addNamespace('default', '', '.html.twig', 'twig'); 
        // Add the view renderer 
        $viewManager->addRenderer('twig', function() use ($template) { 
            return new View($template); 
        }); 
 
        // Set the session manager 
        $di->setSessionManager(function() { 
            return new Session(); 
        }); 
 
        // Set the framework service container wrapper 
        $di->setAppContainer(new Container($kernel->getContainer())); 
 
        // Set the logger 
        $this->setLogger($logger); 
 
        $this->bootstrap() 
            ->lib($config['lib']) 
            ->app($config['app']) 
            // ->uri($sUri) 
            ->js($bExportJs, $sJsUrl, $sJsDir, $bMinifyJs) 
            ->run(); 
 
        // Prevent the Jaxon library from sending the response or exiting 
        $jaxon->setOption('core.response.send', false); 
        $jaxon->setOption('core.process.exit', false); 
    } 
 
    /** 
     * Get the HTTP response 
     * 
     * @param string    $code       The HTTP response code 
     * 
     * @return mixed 
     */ 
    public function httpResponse($code = '200') 
    { 
        $jaxon = jaxon(); 
        // Get the reponse to the request 
        $jaxonResponse = $jaxon->di()->getResponseManager()->getResponse(); 
        if(!$jaxonResponse) 
        { 
            $jaxonResponse = $jaxon->getResponse(); 
        } 
 
        // Create and return a Symfony HTTP response 
        $httpResponse = new HttpResponse(); 
        $httpResponse->headers->set('Content-Type', $jaxonResponse->getContentType()); 
        $httpResponse->setCharset($jaxonResponse->getCharacterEncoding()); 
        $httpResponse->setStatusCode($code); 
        $httpResponse->setContent($jaxonResponse->getOutput()); 
        return $httpResponse; 
    } 
 
    /** 
     * Process an incoming Jaxon request, and return the response. 
     * 
     * @return mixed 
     */ 
    public function processRequest() 
    { 
        // Process the jaxon request 
        jaxon()->processRequest(); 
 
        // Return the reponse to the request 
        return $this->httpResponse(); 
    } 
} 
 
 |