Как стать автором
Обновить

Модули/HMVC в CodeIgniter 4

Время на прочтение3 мин
Количество просмотров2.4K
image
Одним из самых больших и горячих обсуждений о будущем 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 Standard\Blog;

use Standard\Blog\Models\BlogModel;
use Standard\Blog\Libraries\BlogLibrary;
use Standard\Blog\Config\Blog as BlogConfig;

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

Загрузка Helpers


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

/standard/Blog/Helpers/BlogHelper.php.

Для загрузки класса используем функцию load_helper ():
load_helper('Standard\Blog\Helpers\BlogHelper');

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

Загрузка View


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

echo load_view('Standard\Blog\Views\index', $data);

load_helper('Standard\Blog\BlogHelper');

echo load_view('Standard\Blog\index', $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/
Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
Всего голосов 10: ↑8 и ↓2+6
Комментарии2

Публикации

Истории

Ближайшие события

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань