dev-master
9999999-devБыстрая реализация MVC опыта ради
The Requires
Wallogit.com
2017 © Pedro Peláez
Быстрая реализация MVC опыта ради
Описание, (*1)
MMVC - micro mvc. Идея была проста: сделать свою реализацию mvc с максимум 2 потомками в дереве (т.е. не более 3 классов на ветку). При этом хотелось уметь как веб, так и cli, уметь в ORM и билдер запросов., (*2)
Этот проект был написан не использования на продакшене ради, а опыта для., (*3)
Проект вырос из одного тестового задания, которое требовало MVC с CRUD'ом одной таблицы. Задание самоусложнялось в целях обучения и в этого появилось то, что лежит сейчас в репозитории. К слову, некоторые демопроекты на основе этого имеются (например, здесь и здесь), но исключительно чтобы показать работоспособность в лабораторных условиях. Даже после полного покрытия тестами использовать самописные фреймворки не в пет проектах это плохо и не надо так., (*4)
Как оно устроено внутри? Все запросы перенаправляются в index.php, который инициализирует конфиг (по сути создается ассоциативный массив), далее управление передается объекту Router, задачей которого является инициализировать нужный контроллер и вызвать нужный метод., (*5)
Иерархия классов, (*6)
, (*7)
Использование в веб-приложениях, (*8)
Допустим мы хотим обрабатывать ссылки /index.php?u=test-test, (*9)
Для этого необходимо в каталоге controllers создать файл TestController.php и описать в нем класс TestController и метод actionTest:, (*10)
<?php
namespace myapplicationnamespace\controllers;
use mmvc\core\AccessChecker;
use mmvc\controllers\WebController;
class GuestController extends WebController
{
public function __construct() {
//здесь можно определить, кто к каким экшенам может получать доступ
$this->rules = [
'test' => [
AccessChecker::RULE_GRANTED => AccessChecker::USER_ALL,
],
];
parent::__construct();
}
public function actionTest() {
return 'hello, world!';
}
}
также можно включить ЧПУ, чтобы вместо /index.php?u=test-test использовать /test/test (смотрим пример конфига), (*11)
Использование в консольных приложениях, (*12)
Все тоже самое, что и в случае веб-приложений, только наследоваться необходимо от класс CliController. AccessChecker не работает для консольных контроллеров. Пример консольного контроллера есть в самом проекте: GenController., (*13)
Пример конфига, (*14)
$config = [
// данные для работы с СУБД
// обязка над PDO
'db' =>
[
'driver' => RDBHelper::DB_TYPE_MYSQL,
'username' => '',
'password' => '',
'host' => 'localhost',
'schema' => 'mmvc_test',
],
// не используется
'users' => [
'admin' =>
[
'username' => 'admin',
'password' => '123',
'user_hash' => '',
],
],
// путь для сохранения логов
'logpath' => MMVC_ROOT_DIR . DIRECTORY_SEPARATOR . 'log' . DIRECTORY_SEPARATOR . 'main.log',
// временная зона по умолчанию
'timezone' => 'Etc/GMT-3',
// тип ссылок
'route' => \mmvc\core\routers\UrlFriendlyRouter::class,
// дефолтный маршрут
// используется, например, при обращении к корневому каталогу без передачи параметров
'defaultAction' => [
// название контроллера
'controller' => \al\controllers\IndexController::class,
// название метода для вызова после подгрузки
'action' => 'actionTest'
],
];
Быстрая реализация MVC опыта ради