155 lines
3.7 KiB
PHP
155 lines
3.7 KiB
PHP
<?php
|
|
|
|
function __autoload($className)
|
|
{
|
|
$dirs = array('classes','models','controllers');
|
|
|
|
$loaded = flase;
|
|
foreach ($dirs as $dir) {
|
|
$fileName = dirname(__FILE__) . '/../ground/' . $dir. '/' . $className . '.php';
|
|
|
|
if (file_exists($fileName)){
|
|
$loaded = (bool) include $fileName;
|
|
}
|
|
}
|
|
|
|
if (!$loaded){
|
|
App::error404 ('load class '.$className);
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
class App
|
|
{
|
|
private static $url = array();
|
|
private static $controller = 'IndexController';
|
|
private static $action = 'actionIndex';
|
|
private static $basedir = false;
|
|
private static $config = array();
|
|
private static $urlParams = array();
|
|
public static $DB = null;
|
|
|
|
/**
|
|
* Разбивает урл на контроллер, метод и выбирает параметры.
|
|
*/
|
|
private static function parseUrl()
|
|
{
|
|
self::$url = explode('/', $_SERVER['REQUEST_URI']);
|
|
self::$controller = isset(self::$url[1]) && self::$url[1] ? ucfirst(self::$url[1]) . 'Controller' : self::$controller;
|
|
self::$action = isset(self::$url[2]) && self::$url[2] ? 'action' . ucfirst(self::$url[2]) : self::$action;
|
|
|
|
// Разбираем параметры из урла
|
|
if ((count(self::$url) > 3) && (self::$url[3]))
|
|
{
|
|
for ($index = 3; $index < count(self::$url); $index = $index + 2)
|
|
{
|
|
$paramName = self::$url[$index];
|
|
$paramValue = isset(self::$url[$index + 1]) && self::$url[$index + 1] ? self::$url[$index + 1] : NULL;
|
|
self::$urlParams[$paramName] = $paramValue;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Основной метод для запуска приложения.
|
|
* @param array $config
|
|
*/
|
|
public static function run($config)
|
|
{
|
|
ob_start();
|
|
self::$config = is_array($config) ? $config : array();
|
|
self::parseUrl();
|
|
|
|
if (self::getConfig('DB'))
|
|
{
|
|
try
|
|
{
|
|
$confDB = self::getConfig('DB');
|
|
self::$DB = new PDO('mysql:host=' . $confDB['host'] . ';dbname=' . $confDB['dbname'].';charset=utf8;', $confDB['user'], $confDB['password']);
|
|
}
|
|
catch (PDOException $e)
|
|
{
|
|
echo $e->getMessage();
|
|
}
|
|
}
|
|
|
|
$controller = self::$controller;
|
|
$action = self::$action;
|
|
|
|
if (method_exists($controller, $action))
|
|
{
|
|
$controller::$action();
|
|
} else
|
|
{
|
|
self::error404();
|
|
}
|
|
}
|
|
|
|
public static function error404($message = '')
|
|
{
|
|
header("HTTP/1.0 404 Not Found");
|
|
die('Error 404 '.$message);
|
|
}
|
|
|
|
public static function redirect($url)
|
|
{
|
|
header("Location: " . $url);
|
|
}
|
|
|
|
/**
|
|
* Возвращает директорию фреймворка /full/path/ground/
|
|
* @return type
|
|
*/
|
|
public static function getBasedir()
|
|
{
|
|
if (!self::$basedir)
|
|
self::$basedir = dirname(__FILE__) . '/';
|
|
|
|
return self::$basedir;
|
|
}
|
|
|
|
/**
|
|
* Возвращает значение параметра из конфига
|
|
* @param string $paramName
|
|
* @return multi
|
|
*/
|
|
public static function getConfig($paramName)
|
|
{
|
|
return isset(self::$config[$paramName]) ? self::$config[$paramName] : NULL;
|
|
}
|
|
|
|
/**
|
|
* Устанавливает значение в конфиге
|
|
* @param string $paramName
|
|
* @param multi $paramValue
|
|
* @return true
|
|
*/
|
|
public static function setConfig($paramName, $paramValue)
|
|
{
|
|
self::$config[$paramName] = $paramValue;
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Возвращает значение параметра, переданного в URL
|
|
* @param string $paramName
|
|
* @return string
|
|
*/
|
|
public static function getParam($paramName)
|
|
{
|
|
return isset(self::$urlParams[$paramName]) ? self::$urlParams[$paramName] : NULL;
|
|
}
|
|
|
|
/**
|
|
* Возвращает массив параметров, переданных в URL
|
|
* @return array
|
|
*/
|
|
public static function getParams()
|
|
{
|
|
return self::$urlParams;
|
|
}
|
|
|
|
}
|