Модули-HMVC в CodeIgniter 4

в 10:26, , рубрики: codeigniter, composer, hmvc, module

Модули/HMVC в CodeIgniter 4

Одним из самых больших и горячих обсуждений о будущем CodeIgniter 4, было обсуждение о поддержке и возможности использования модулей/HMVC.

Большинство было за то, чтобы в CodeIgniter по умолчанию можно было использовать два шаблона проектирования веб-приложений: MVC и HMVC. Однако совет CI пришел к мнению, что внедрение HMVC противоречит основных принципам и идеологии фреймворка в целом.

Поддержка модулей/HMVC

Как уже стало ясно, в CodeIgniter 4 не будет поддержки ни HMVC, ни модулей. Не будет официального определения структуры модуля как такового. По крайней мере, там не будет модульности в том виде, в какой ее можно представить в Yii Framework или Drupal CMS.
Нет никакой иерархической загрузки классов при помощи различных каталогов.
Если все это так, то как мы можем поддерживать любую форму модулей и строить удобные модульные веб-приложения? На это у нас имеется автозагрузка и пространства имен.

Автозагрузка и пространства имен

Теперь фреймворк поставляется с встроенным PSR-4 совместимым автозагрузчиком. Нет необходимости использовать Composer. Если все же вы желаете его использовать, то его можно встроить в качестве дополнения.

Но почему бы просто не использовать Composer в качестве основного загрузчика? Лонни Эцелл, разработчик CodeIgniter 4, который сейчас занимается построением ядра фреймворка, сторонник использования Composer в CodeIgniter. Однако, разработчики пришли к выводу что использование Composer будет не правильным решением. Например, для некоторых хостингов Composer будет проблематичным, не везде его можно применять. Еще необходимо поддерживать функционал, который задействует Composer.
Системные файлы и файлы приложения могут быть в пространстве имен. Системные файлы в пространстве имен CodeIgniter, а каталог приложений в пространстве имен App по умолчанию.

Простой пример

Представьте, что мы создаем модуль блога. Первое, что нужно сделать, это принять решение о пространстве имен, а затем решить где разместить файлы. Для примера будет использоваться каталог Standard, в котором будут все необходимые файлы модуля. Структура папок может выглядеть примерно так:

/application
/standard
    /Blog
        /Config
        /Controllers
        /Helpers
        /Libraries
        /Models
        /Views
/system

Чтобы система знала, где найти файлы, нужно открыть файл:

/application/Config/Autoload.php

где следует указать:

$psr4 = [
        'Config'                     => APPPATH.'Config',
        APP_NAMESPACE.'Controllers' => APPPATH.'Controllers',
        APP_NAMESPACE                => realpath(APPPATH),
        'Standard'                   => APPPATH.'../standard'
    ];

Теперь, система может найти все что нужно и использовать в любом месте:

namespace StandardBlog;

use StandardBlogModelsBlogModel;
use StandardBlogLibrariesBlogLibrary;
use StandardBlogConfigBlog as BlogConfig;

class BlogController extends CodeIgniterController
{
    public function index()
    {
        $model = new BlogModel();
        $blogLib = new BlogLibrary();
        $config = new BlogConfig();
    }
}

Загрузка Helpers

В нашем примере, мы могли бы иметь файл

/standard/Blog/Helpers/BlogHelper.php.

Для загрузки класса используем функцию load_helper ():

load_helper('StandardBlogHelpersBlogHelper');

Функция поможет найти хелпер и загрузить его.

Загрузка View

При использовании шаблона модуля, представления могут быть загружены при помощи функции load_view ().

echo load_view('StandardBlogViewsindex', $data);
load_helper('StandardBlogBlogHelper');
echo load_view('StandardBlogindex', $data);

Хотя, это не единственный способ, которым вы можете структурировать вещи в вашем приложении.

ПРИМЕЧАНИЕ: Примеры основаны на коде предварительной версии и вся специфика может быть изменена на любую другую.


Ссылки по теме

Источник: Modules in CodeIgniter 4
CodeIgniter Wikipedia: ru.wikipedia.org/wiki/CodeIgniter
Официальный сайт CodeIgniter: www.codeigniter.com
Официальный форум CodeIgniter: forum.codeigniter.com
CodeIgniter 4: https://habrahabr.ru/post/275657/
CI Community Apps: https://habrahabr.ru/post/276375/
Requests и Responses в CodeIgniter 4: https://habrahabr.ru/post/278489/
Внедрение зависимостей в CodeIgniter 4: https://habrahabr.ru/post/278641/
Маршрутизация в CodeIgniter 4: https://habrahabr.ru/post/278873/

Автор: condor-bird

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js