<?php
namespace Jaxon\Zend\Controller\Plugin;
use Zend\Mvc\Controller\Plugin\AbstractPlugin;
use Zend\Http\Response as HttpResponse;
use Zend\View\Renderer\RendererInterface;
class JaxonPlugin extends AbstractPlugin
{
use \Jaxon\Features\App;
/**
* @var ContainerInterface|ServiceLocatorInterface $container
*/
protected $xContainer;
/**
* Setup Jaxon with the view renderer and the DI container.
*
* @param ContainerInterface|ServiceLocatorInterface $container
*
* @return void
*/
public function setContainer($xContainer)
{
$this->xContainer = $xContainer;
// Initialize the Jaxon plugin
$this->jaxonSetup();
}
/**
* Set the module specific options for the Jaxon library.
*
* @return void
*/
protected function jaxonSetup()
{
// The application debug option
$bIsDebug = (getenv('APP_ENV') != 'production');
// The application root dir
$sAppPath = rtrim(getcwd(), '/');
// The application URL
$sJsUrl = '//' . $_SERVER['SERVER_NAME'] . '/jaxon/js';
// The application web dir
$sJsDir = $_SERVER['DOCUMENT_ROOT'] . '/jaxon/js';
$jaxon = jaxon();
$di = $jaxon->di();
// Read the config options.
$aOptions = $jaxon->config()->read($sAppPath . '/config/jaxon.config.php');
$aLibOptions = key_exists('lib', $aOptions) ? $aOptions['lib'] : [];
$aAppOptions = key_exists('app', $aOptions) ? $aOptions['app'] : [];
$viewManager = $di->getViewManager();
// Set the default view namespace
$viewManager->addNamespace('default', '', '', 'zend');
// Add the view renderer
$viewManager->addRenderer('zend', function() {
return new \Jaxon\Zend\View($this->xContainer->get('ViewRenderer'));
});
// Set the session manager
$di->setSessionManager(function() {
return new \Jaxon\Zend\Session();
});
// Set the framework service container wrapper
$di->setAppContainer(new \Jaxon\Zend\Container($this->xContainer));
$this->bootstrap()
->lib($aLibOptions)
->app($aAppOptions)
// ->uri($sUri)
->js(!$bIsDebug, $sJsUrl, $sJsDir, !$bIsDebug)
->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 ZF2 HTTP response
$httpResponse = new HttpResponse();
$headers = $httpResponse->getHeaders();
$headers->addHeaderLine('Content-Type', $jaxonResponse->getContentType() .
'; charset=' . $jaxonResponse->getCharacterEncoding());
$httpResponse->setStatusCode(intval($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();
}
}
|