Giter VIP home page Giter VIP logo

mmvc's Introduction

Описание

MMVC - micro mvc. Идея была проста: сделать свою реализацию mvc с максимум 2 потомками в дереве (т.е. не более 3 классов на ветку). При этом хотелось уметь как веб, так и cli, уметь в ORM и билдер запросов.

Этот проект был написан не использования на продакшене ради, а опыта для.

Проект вырос из одного тестового задания, которое требовало MVC с CRUD'ом одной таблицы. Задание самоусложнялось в целях обучения и в этого появилось то, что лежит сейчас в репозитории. К слову, некоторые демопроекты на основе этого имеются (например, здесь и здесь), но исключительно чтобы показать работоспособность в лабораторных условиях. Даже после полного покрытия тестами использовать самописные фреймворки не в пет проектах это плохо и не надо так.

Как оно устроено внутри? Все запросы перенаправляются в index.php, который инициализирует конфиг (по сути создается ассоциативный массив), далее управление передается объекту Router, задачей которого является инициализировать нужный контроллер и вызвать нужный метод.

Иерархия классов

Использование в веб-приложениях

Допустим мы хотим обрабатывать ссылки /index.php?u=test-test

Для этого необходимо в каталоге controllers создать файл TestController.php и описать в нем класс TestController и метод actionTest:

<?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 (смотрим пример конфига)

Использование в консольных приложениях

Все тоже самое, что и в случае веб-приложений, только наследоваться необходимо от класс CliController. AccessChecker не работает для консольных контроллеров. Пример консольного контроллера есть в самом проекте: GenController.

Пример конфига

$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'
    ],
];

mmvc's People

Contributors

dv4mp1r3 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.