-
Notifications
You must be signed in to change notification settings - Fork 0
/
Bootstrap.php
98 lines (89 loc) · 2.88 KB
/
Bootstrap.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<?php
/**
* Bootstrap
*
* An example bootstrap function.
*
* @package Bootstrap
*/
namespace Evoke\Bootstrap;
use DateTime,
Evoke\Network\HTTP,
Evoke\Service,
Evoke\View,
Evoke\Writer,
XMLWriter;
/**
* Bootstrap
*
* Example function for initializing a system.
*
* @param bool Whether this is a development server.
* @param string The filename of the log file to use.
* @return HTTP\Response
*/
function bootstrap($isDevelopmentServer, $logFile)
{
try
{
/************/
/* Autoload */
/************/
$component = 'Autoload';
$evokeDir = __DIR__ . '/src/';
$autoloadDir = $evokeDir . 'Evoke/Service/Autoload/';
require $autoloadDir . 'AutoloadIface.php';
require $autoloadDir . 'PSR0Namespace.php';
$autoloader = new Service\Autoload\PSR0Namespace(
$evokeDir, 'Evoke\\');
spl_autoload_register([$autoloader, 'load']);
/***********/
/* Logging */
/***********/
$component = 'Logging';
$logging = new Service\Log\Logging(new DateTime);
$logging->attach(new Service\Log\File($logFile));
/************/
/* Response */
/************/
$component = 'Response';
$response = new HTTP\Response;
/********************/
/* Shutdown Handler */
/********************/
$component = 'Shutdown Handler';
$viewShutdownMessageBox = new View\HTML5\MessageBox(
['class' => 'Message_Box Shutdown']);
$viewError = new View\HTML5\Error;
$xhtmlWriter = new Writer\XML(new XMLWriter);
$shutdownHandler = new Service\ShutdownHandler(
'admin@example.com', $response, $isDevelopmentServer,
$viewShutdownMessageBox, $xhtmlWriter, $viewError);
register_shutdown_function([$shutdownHandler, 'handler']);
/*********************/
/* Exception Handler */
/*********************/
$component = 'Exception Handler';
$viewExceptionMessageBox = new View\HTML5\MessageBox(
['class' => 'Message_Box Exception']);
$viewException = new View\HTML5\Exception;
$exceptionHandler = new Service\ExceptionHandler(
$response, $isDevelopmentServer, $viewExceptionMessageBox,
$xhtmlWriter, $viewException);
set_exception_handler([$exceptionHandler, 'handler']);
/*****************/
/* Error Handler */
/*****************/
$component = 'Error Handler';
$errorHandler = new Service\ErrorHandler($logging);
set_error_handler([$errorHandler, 'handler']);
return $response;
}
catch(\Exception $e)
{
header('HTTP/1.1 500 Internal Server Error');
die('System failure due to: ' . $component . '.' .
$isDevelopmentServer ? ' Exception: ' . $e->getMessage() : '');
}
}
// EOF