Здравствуйте. В учебных целях имеется проект интернет магазина php+mvc+oop, но я хочу админку отделать от остального кода. Ткните носом что почитать или куда посмотреть. Скрин структуры проекта ниже
Маршрутизатор:
/**
* Класс Router
* Компонент для работы с маршрутами
*/
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);
$actionName = 'action' . ucfirst(array_shift($segments));
$parameters = $segments;
// Подключить файл класса-контроллера
$controllerFile = ROOT . '/controllers/' .
$controllerName . '.php';
if (file_exists($controllerFile)) {
include_once($controllerFile);
}
// Создать объект, вызвать метод (т.е. action)
$controllerObject = new $controllerName;
/* Вызываем необходимый метод ($actionName) у определенного
* класса ($controllerObject) с заданными ($parameters) параметрами
*/
$result = call_user_func_array(array($controllerObject, $actionName), $parameters);
// Если метод контроллера успешно вызван, завершаем работу роутера
if ($result != null) {
break;
}
}
}
}
}
Роуты:
return array(
// Товар:
'product/([0-9]+)' => 'product/view/$1', // actionView в ProductController
// Каталог:
'catalog' => 'catalog/index', // actionIndex в CatalogController
// Категория товаров:
'category/([0-9]+)/page-([0-9]+)' => 'catalog/category/$1/$2', // actionCategory в CatalogController
'category/([0-9]+)' => 'catalog/category/$1', // actionCategory в CatalogController
// Корзина:
'cart/checkout' => 'cart/checkout', // actionAdd в CartController
'cart/delete/([0-9]+)' => 'cart/delete/$1', // actionDelete в CartController
'cart/add/([0-9]+)' => 'cart/add/$1', // actionAdd в CartController
'cart/addAjax/([0-9]+)' => 'cart/addAjax/$1', // actionAddAjax в CartController
'cart' => 'cart/index', // actionIndex в CartController
// Пользователь:
'user/register' => 'user/register',
'user/login' => 'user/login',
'user/logout' => 'user/logout',
'cabinet/edit' => 'cabinet/edit',
'cabinet' => 'cabinet/index',
// Управление товарами:
'admin/product/create' => 'adminProduct/create',
'admin/product/update/([0-9]+)' => 'adminProduct/update/$1',
'admin/product/delete/([0-9]+)' => 'adminProduct/delete/$1',
'admin/product' => 'adminProduct/index',
// Управление категориями:
'admin/category/create' => 'adminCategory/create',
'admin/category/update/([0-9]+)' => 'adminCategory/update/$1',
'admin/category/delete/([0-9]+)' => 'adminCategory/delete/$1',
'admin/category' => 'adminCategory/index',
// Управление заказами:
'admin/order/update/([0-9]+)' => 'adminOrder/update/$1',
'admin/order/delete/([0-9]+)' => 'adminOrder/delete/$1',
'admin/order/view/([0-9]+)' => 'adminOrder/view/$1',
'admin/order' => 'adminOrder/index',
// Админпанель:
'admin' => 'admin/index',
// О магазине
'contacts' => 'site/contact',
'about' => 'site/about',
// Главная страница
'index.php' => 'site/index', // actionIndex в SiteController
'' => 'site/index', // actionIndex в SiteController
);