Корпоративный сайт
Портал для компании!
Интернет-магазин
Современный и быстрый сайт!
Социальная сеть
Уникальные решения!
Персональный сайт
Для вашего бизнеса!
ВЕБ
Полный стек веб-разработки...
НАШИ РЕШЕНИЯ PHP
Архитектурный шаблон MVC (Модель, Представление, Контроллер).
Применение архитектурного шаблона MVC (модель, представление, контроллер)... Пример кода
Шаблон проектирования MVC разделяет данные приложения, пользовательский интерфейс и логику управления на три отдельных компонента: модель, представление и контроллер, так что каждый компонент может быть изменен независимо... Это позволяет упростить код большого приложения, сделать его понятным и структурированным, облегчить обслуживание, тестирование и повторное использование элементов!
index.php (Front controller)
// FRONT CONTROLLER
// Error settings
ini_set('display_errors',1);
//ini_set('display_errors','off');
error_reporting(E_ALL);
//error_reporting(E_NOTICE);
session_start();
// Connecting system files
define('ROOT', dirname(__FILE__));
require_once(ROOT.'/components/Autoload.php');
// Calling Router
$router = new Router();
$router->run();
.htaccess
AddDefaultCharset utf-8
#ErrorDocument 404 /
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php
Autoload.php (функция автоматического подключения к классу)
function my_autoloader($class_name)
{
// Массив папок, в которых могут быть расположены необходимые классы
$array_paths = array(
'/models/',
'/components/',
'/controllers/',
);
// Проходим по массиву папок
foreach ($array_paths as $path) {
// Формирование имени и пути к файлу с классом
$path = ROOT . $path . $class_name . '.php';
// Если такой файл существует, мы подключаем его
if (is_file($path)) {
include_once $path;
}
}
}
spl_autoload_register('my_autoloader');
Router.php (Класс для работы с маршрутами)
class Router
{
/** массив с маршрутами @var array*/
private $routes;
/** Конструктор читает и запоминает маршруты*/
public function __construct()
{
// Путь к файлу с маршрутами
$routesPath = ROOT . '/config/routes.php';
// Получаем маршруты из файла
$this->routes = include($routesPath);
}
/** Возвращает строку запроса*/
private function getURI()
{
if (!empty($_SERVER['REQUEST_URI'])) {
return trim($_SERVER['REQUEST_URI'], '/');
}
}
/** Метод для обработки запроса*/
public function run()
{
// Получаем строку запроса
$uri = $this->getURI();
// Проверяем наличие такого запроса в массиве маршрутов (routes.php)
foreach ($this->routes as $uriPattern => $path) {
// Сравниваем $uriPattern и $uri
if (preg_match("~$uriPattern~", $uri)) {
// Получаем внутренний путь из внешнего согласно правилу (регулярное выражение)
$internalRoute = preg_replace("~$uriPattern~", $path, $uri);
// Определяем контроллер, метод (action) и параметры запроса
$segments = explode('/', $internalRoute);
// Получаем имя контроллера
$controllerName = array_shift($segments) . 'Controller';
$controllerName = ucfirst($controllerName);
// Определяем action
$actionName = 'action' . ucfirst(array_shift($segments));
$parameters = $segments;
// Подключаем файл класса-контроллера
$controllerFile = ROOT . '/controllers/' .
$controllerName . '.php';
if (file_exists($controllerFile)) {
include_once($controllerFile);
}
// Создаем объект контроллера
$controllerObject = new $controllerName;
/* Вызываем необходимый метод ($actionName) у определенного
* класса ($controllerObject) с заданными ($parameters) параметрами
*/
$result = call_user_func_array(array($controllerObject, $actionName), $parameters);
// Если метод контроллера успешно вызван, завершаем работу роутера
if ($result != null) {
break;}
}
}
}
}
routes.php (пример массива с маршрутами)
return array(
/** Здесь мы пишем маршруты (!!! применяя регулярные выражения)...
* Примеры:
* 'confirm/([0-9a-z]+)' => 'user/confirm_email/$1',
* 'news/update/([0-9]+)/([0-9]+)' => 'news/update_news/$1/$2',
*/
// Маршрут для главной страницы сайта
'index.php' => 'site/index', // actionIndex в SiteController
'' => 'site/index', // actionIndex в SiteController
);
SiteController.php (пример контроллера)
class SiteController
{
/**
* Action для главной страницы сайта
*/
public function actionIndex()
{
// Получаем данные из модели
$data = Site::getData();
// Подключаем представление (вид)
require_once(ROOT . '/views/site/index.php');
return true;
}
}
Модель взаимодействует с базой данных. Получает данные и производит с ними необходимые действия.
/**
* Класс Site - модель для SiteController
*/
class Site
{
public static function getData()
{
// подключение к базе данных
// выполнение запроса к базе данных
// получение и возврат результатов
}
}
Здесь представлен пример реализации архитектурного шаблона MVC на языке программирования PHP...
Обязательно применяйте методику разработки программного обеспечения, предотвращающую внедрение уязвимостей, обеспечивающую устойчивость к воздействию вредоносных программ и несанкционированному доступу!