- PVSM.RU - https://www.pvsm.ru -

Модули-HMVC в CodeIgniter 4

Модули/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 [1]
CodeIgniter Wikipedia: ru.wikipedia.org/wiki/CodeIgniter [2]
Официальный сайт CodeIgniter: www.codeigniter.com [3]
Официальный форум CodeIgniter: forum.codeigniter.com [4]
CodeIgniter 4: https://habrahabr.ru/post/275657/ [5]
CI Community Apps: https://habrahabr.ru/post/276375/ [6]
Requests и Responses в CodeIgniter 4: https://habrahabr.ru/post/278489/ [7]
Внедрение зависимостей в CodeIgniter 4: https://habrahabr.ru/post/278641/ [8]
Маршрутизация в CodeIgniter 4: https://habrahabr.ru/post/278873/ [9]

Автор: condor-bird

Источник [10]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/module/115226

Ссылки в тексте:

[1] Modules in CodeIgniter 4: http://blog.newmythmedia.com/blog/show/2016-03-15_Modules_in_CodeIgniter_4

[2] ru.wikipedia.org/wiki/CodeIgniter: http://ru.wikipedia.org/wiki/CodeIgniter

[3] www.codeigniter.com: http://www.codeigniter.com/

[4] forum.codeigniter.com: http://forum.codeigniter.com/

[5] https://habrahabr.ru/post/275657/: https://habrahabr.ru/post/275657/

[6] https://habrahabr.ru/post/276375/: https://habrahabr.ru/post/276375/

[7] https://habrahabr.ru/post/278489/: https://habrahabr.ru/post/278489/

[8] https://habrahabr.ru/post/278641/: https://habrahabr.ru/post/278641/

[9] https://habrahabr.ru/post/278873/: https://habrahabr.ru/post/278873/

[10] Источник: https://habrahabr.ru/post/279415/