php require_once config php require_once LIB_PATH db php require_once

  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
 99
100
101
102
103
104
105
106
107
108
109
<?php
require_once 'config.php';
require_once LIB_PATH.'/db.php';
require_once LIB_PATH.'/view.php';
/**
* Главная функция приложения. Вызывает необходимый контроллер, выполняет требуемое действие и с помощью объекта View выводит результат.
*
* @param string $ctl_name Имя контроллера
* @param string $action Действие
* @param string $method Метод запроса (POST|GET)
* @param array $data Параметры запроса
* @param string $file Имяч файла, из которго вызывается функция.
*
*/
function main($ctl_name, $action, $method, $data, $file)
{
// Первым делом — обработка исключений!
/* путь к скрипту от корня ФС */
$full_root = dirname($_SERVER['SCRIPT_FILENAME']);
/* путь к текущей папке от DOCCUMENT_ROOT */
$root = strtr(dirname($_SERVER['PHP_SELF']), '\\', '/');
$dir_uri = 'http://'.$_SERVER['HTTP_HOST'].rtrim($root, '/\\');
/* Удаление лишних слешей */
if (get_magic_quotes_gpc())
{
foreach ($data as $k => $v)
{
$data[$k] = stripslashes($v);
}
}
$db = new DB();
$db->connect(DB_HOST, DB_NAME, DB_USER, DB_PASS) or die("Error connecting to database");
$view = new View($full_root);
$objects = Array(
'db' => $db,
'dir_uri' => $dir_uri
);
/* Вызов контроллера */
$ctl_class = $ctl_name.'_Ctl';
$ctl_file = strtolower($ctl_class).'.php';
require_once LIB_PATH.'/'.$ctl_file;
$ctl = new $ctl_class($objects);
$action_method = "action_$action";
if (!method_exists($ctl, $action_method))
{
die("Internal error.");
}
// ставим шаблон по ум-ю вида контроллер-действие.tpl
$ctl->template = strtolower($ctl_name).'-'.strtolower($action).".tpl";
$ctl->$action_method($method, $data);
$viewdata = $ctl->getViewData();
/* Дополнительные переменные, вроде имени скрипта, выбранного контроллера, и т. д.*/
$viewdata['global'] = Array(
'ctl' => $ctl_name,
'action'=> $action,
'file' => $file,
'root' => $root,
'title' => $ctl->getTitle()
);
/* вывод шаблона */
$view->display($ctl->getTemplate(), $viewdata);
}
set_error_handler(create_function('$c, $m, $f, $l', 'if ($c === E_NOTICE) {echo 'This is notice: '.$m} else {throw new MyException($m, $c, $f, $l);}'), E_ALL);
function sMVCHandlePHPError($type, $msg, $file,$line)
{
// Здесь можно добавить backtrace, error_log и пропуск нотисов
//~ if ($c === E_NOTICE)
//~ {
//~ echo 'This is notice: '.$m
//~ }
//~ else
throw new MyException($msg, $type, $file, $line);
}
/** Класс для преобразования PHP-ошибок в исключения */
class MyException extends Exception
{
public function __construct($message, $errorLevel = 0, $errorFile = '', $errorLine = 0)
{
parent::__construct($message, $errorLevel);
$this->file = $errorFile;
$this->line = $errorLine;
}
}
?>