Last active
May 17, 2017 12:52
-
-
Save silentworks/ac5f80e251c4e08ce4bb01421aa5aa06 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
$app = new Zend\Stratigility\MiddlewarePipe(); | |
// Direct instantiation, with a callback handler, request, and response | |
$server = Zend\Diactoros\Server::createServer($app, $_SERVER, $_GET, $_POST, $_COOKIE, $_FILES); | |
$app->pipe('/hello', function ($req, $res, $next) { | |
return $res->getBody()->write('Hello World!'); | |
}); | |
$app->pipe(function (Psr\Http\Message\RequestInterface $req, Psr\Http\Message\ResponseInterface $res, $next) { | |
$app = new Slim\App(); | |
$app->get('/hi', function ($req, $res) { | |
return $res->getBody()->write("I am in Slim"); | |
}); | |
/** @var Zend\Diactoros\Response $response */ | |
$response = $app($req, $res); | |
if ($response->getStatusCode() !== 404) { | |
return $response; | |
} | |
return $next($req, $res); | |
}); | |
$app->pipe(new App\Core\CodeigniterPSR7Middleware()); | |
$server->listen(); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
class CodeigniterInit | |
{ | |
public static function run() | |
{ | |
/* | |
*--------------------------------------------------------------- | |
* SYSTEM FOLDER NAME | |
*--------------------------------------------------------------- | |
* | |
* This variable must contain the name of your "system" folder. | |
* Include the path if the folder is not in the same directory | |
* as this file. | |
*/ | |
$system_path = 'system'; | |
/* | |
*--------------------------------------------------------------- | |
* APPLICATION FOLDER NAME | |
*--------------------------------------------------------------- | |
* | |
* If you want this front controller to use a different "application" | |
* folder than the default one you can set its name here. The folder | |
* can also be renamed or relocated anywhere on your server. If | |
* you do, use a full server path. For more info please see the user guide: | |
* http://codeigniter.com/user_guide/general/managing_apps.html | |
* | |
* NO TRAILING SLASH! | |
*/ | |
$application_folder = 'application'; | |
/* | |
*--------------------------------------------------------------- | |
* VIEW FOLDER NAME | |
*--------------------------------------------------------------- | |
* | |
* If you want to move the view folder out of the application | |
* folder set the path to the folder here. The folder can be renamed | |
* and relocated anywhere on your server. If blank, it will default | |
* to the standard location inside your application folder. If you | |
* do move this, use the full server path to this folder. | |
* | |
* NO TRAILING SLASH! | |
*/ | |
$view_folder = ''; | |
/* | |
* --------------------------------------------------------------- | |
* Resolve the system path for increased reliability | |
* --------------------------------------------------------------- | |
*/ | |
// Set the current directory correctly for CLI requests | |
if (defined('STDIN')) | |
{ | |
chdir(dirname(__FILE__)); | |
} | |
if (($_temp = realpath($system_path)) !== FALSE) | |
{ | |
$system_path = $_temp.'/'; | |
} | |
else | |
{ | |
// Ensure there's a trailing slash | |
$system_path = rtrim($system_path, '/').'/'; | |
} | |
// Is the system path correct? | |
if ( ! is_dir($system_path)) | |
{ | |
header('HTTP/1.1 503 Service Unavailable.', TRUE, 503); | |
echo 'Your system folder path does not appear to be set correctly. Please open the following file and correct this: '.pathinfo(__FILE__, PATHINFO_BASENAME); | |
exit(3); // EXIT_CONFIG | |
} | |
/* | |
* ------------------------------------------------------------------- | |
* Now that we know the path, set the main path constants | |
* ------------------------------------------------------------------- | |
*/ | |
// The name of THIS file | |
define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME)); | |
// Path to the system folder | |
define('BASEPATH', str_replace('\\', '/', $system_path)); | |
// Path to the front controller (this file) | |
define('FCPATH', str_replace(SELF, '', __FILE__)); | |
// Name of the "system folder" | |
define('SYSDIR', trim(strrchr(trim(BASEPATH, '/'), '/'), '/')); | |
// The path to the "application" folder | |
if (is_dir($application_folder)) | |
{ | |
if (($_temp = realpath($application_folder)) !== FALSE) | |
{ | |
$application_folder = $_temp; | |
} | |
define('APPPATH', $application_folder.DIRECTORY_SEPARATOR); | |
} | |
else | |
{ | |
if ( ! is_dir(BASEPATH.$application_folder.DIRECTORY_SEPARATOR)) | |
{ | |
header('HTTP/1.1 503 Service Unavailable.', TRUE, 503); | |
echo 'Your application folder path does not appear to be set correctly. Please open the following file and correct this: '.SELF; | |
exit(3); // EXIT_CONFIG | |
} | |
define('APPPATH', BASEPATH.$application_folder.DIRECTORY_SEPARATOR); | |
} | |
// The path to the "views" folder | |
if ( ! is_dir($view_folder)) | |
{ | |
if ( ! empty($view_folder) && is_dir(APPPATH.$view_folder.DIRECTORY_SEPARATOR)) | |
{ | |
$view_folder = APPPATH.$view_folder; | |
} | |
elseif ( ! is_dir(APPPATH.'views'.DIRECTORY_SEPARATOR)) | |
{ | |
header('HTTP/1.1 503 Service Unavailable.', TRUE, 503); | |
echo 'Your view folder path does not appear to be set correctly. Please open the following file and correct this: '.SELF; | |
exit(3); // EXIT_CONFIG | |
} | |
else | |
{ | |
$view_folder = APPPATH.'views'; | |
} | |
} | |
if (($_temp = realpath($view_folder)) !== FALSE) | |
{ | |
$view_folder = $_temp.DIRECTORY_SEPARATOR; | |
} | |
else | |
{ | |
$view_folder = rtrim($view_folder, '/\\').DIRECTORY_SEPARATOR; | |
} | |
define('VIEWPATH', $view_folder); | |
/* | |
* -------------------------------------------------------------------- | |
* LOAD THE BOOTSTRAP FILE | |
* -------------------------------------------------------------------- | |
* | |
* And away we go... | |
*/ | |
require_once BASEPATH.'core/CodeIgniter.php'; | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace App\Core; | |
use Psr\Http\Message\ResponseInterface as Response; | |
use Psr\Http\Message\ServerRequestInterface as Request; | |
use Zend\Stratigility\MiddlewareInterface; | |
class CodeigniterPSR7Middleware implements MiddlewareInterface | |
{ | |
/** | |
* Process an incoming request and/or response. | |
* | |
* Accepts a server-side request and a response instance, and does | |
* something with them. | |
* | |
* If the response is not complete and/or further processing would not | |
* interfere with the work done in the middleware, or if the middleware | |
* wants to delegate to another process, it can use the `$out` callable | |
* if present. | |
* | |
* If the middleware does not return a value, execution of the current | |
* request is considered complete, and the response instance provided will | |
* be considered the response to return. | |
* | |
* Alternately, the middleware may return a response instance. | |
* | |
* Often, middleware will `return $out();`, with the assumption that a | |
* later middleware will return a response. | |
* | |
* @param Request $request | |
* @param Response $response | |
* @param null|callable $out | |
* @return null|Response | |
*/ | |
public function __invoke(Request $req, Response $res, callable $out = null) | |
{ | |
ob_start(); | |
\CodeigniterInit::run(); | |
$headers = headers_list(); | |
$statusCode = http_response_code(); | |
header_remove(); | |
$response = $res->withStatus($statusCode); | |
foreach ($headers as $header) { | |
$pieces = explode(':', $header); | |
$headerName = array_shift($pieces); | |
$response = clone $response->withAddedHeader($headerName, trim(implode(':', $pieces))); | |
} | |
return $response->write(ob_get_clean()); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment