Codeigniter

Создание движка на Codeigniter 3 + HMVC. Знакомство, установка и настройка

Последние 2 года я активно использую 2ю версию фреймворка Codeigniter. Хотя впервые я знакомился с ним лет 7 назад. Что то в нем меня разочаровало и я начал знакомится с symphony и Yii. Выбор пал на Yii, однако и с ним мы разошлись через пол года. Видимо не было достаточно опыта в программировании или цели создать свой отличный движок. А два года назад, мой напарник предложил совместно написать современный движок и использовать его во всех своих проектах, постепенно вытесняя бесплатные и платные движки из своей жизни.

Нам нужен был гибкий, легкий, быстрый и простой движок - нужное позволял именно codeigniter. Необходимо было разделить логику работы всех модулей. Сделать каждый модуль независимым, реализовать возможность создавать и устанавливать дополнительные модули для разработки сайта любой сложности и масштаба. При этом необходимо думать так же о ребятах, которым в будущем придется иметь дело с этим движком после нас и быстро разобраться в коде и логике всех методов и контроллеров. Вывод - необходимо было заменить стандартный модель-вид-контроллер - иерархическим.

Это буквально решало все проблемы и предоставило мне - прежде невиданной роскоши в программировании. Нам больше не нужно заботиться о работе основных библиотек сайта и возложить на плечи codeigniter всю логику работы с почтой, сессиями, корзиной и другими...
Мы теперь - продумываем логику приложения, и с заготовками решаем ее в 5 раз быстрее, нежели нам пришлось бы писать весь код на чистом PHP. В общем давайте протестируем последнюю версию старого фреймворка Codeigniter и установим модульное расширение.

Итак: скачиваем последнюю на данный момент версию CodeIgniter 3.0.2. Распаковываем в архив с нашим новым сайтом, на локальном сервере я назвал его ci3.ru. Создаем базу данных ci3 и указываем в конфиге имя логин и пароль к MySQL - папка 'application/config/database.php'. Запускаем и наблюдаем приветственное окно.

image description

Идем далее: скачиваем с репозитория bitbucket расширение HMVC для Codeigniter3 . Если возникнут сложности со скачиванием, то вот ссылка на архив hmvc codeigniter с моего облака.

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

1) application/config/config.php - Здесь нужно указать адрес нашего сайта, для полноценной работы и использования функций фреймворка. Но прописывать путь для каждого сайта - занимает время, так же при переносе сайта с домена на домен необходимо каждый раз править данный файл. Давайте напишем маленький скрипт авто определения домена. Заменяем значение $config['base_url'] в настройках на следующее значение:

$prototype = "http" . ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") ? "s" : "") . "://";
$server = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'];
$config['base_url'] = $prototype . $server;

2) .htaccess - тоже правим. Включаем механизм преобразования - убираем index.php из адресной строки. Указываем кодировку сайта и прочие необходимые настройки для нашего сайта

#задаем кодировку сайта
AddDefaultCharset UTF-8

# Следовать за символическими ссылками или нет(симлинки)
# Options +SymLinksIfOwnerMatch
Options +FollowSymLinks

# Запрет выдачи листинга пустого каталога
Options -Indexes

# По умолчанию файлы
DirectoryIndex index.php 

# Включаем механизма преобразования
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt|assets|sitemap\.xml)
RewriteCond %{REQUEST_URI} !\.(css¦js¦jpg¦gif)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L,QSA]

Теперь мы можем обратиться к первоначальноve методу index контроллера welcome без указания файла index.php в адресной строке браузера. Попробуйте ci3.ru/welcome

3)Копируем две папки модульного расширения(core, third_party) в папку сайта /application.

4) Давайте немного изменим путь хранения модулей. По умолчанию папка modules хранится в папке application. Но я предпочитаю вынести папку модулей, изображений, скриптов и шаблонов в корень сайта, и использовать папку aplication в крайних случаях, для гибкости работы приложения. Откроем еще раз наш конфигурационный файл application/config/config.php и добавим в конец файла следующий код:

$config['modules_locations'] = array(
    APPPATH.'../modules/' => '../../modules/',
);

5) Попробуем воспользоваться нашим приложением на практике:

  • Создаем папку modules в корне сайта
  • В папке modules создаем папку welcome - это наш первый модуль welcome, код которого возьмем из приветственного сообщения CodeIgniter
  • Скопируйте папку controllers и views из папки application в папку modules/welcome. Можно удалить лишние файлы, нам нужен только контроллер и вьюха welcome_message.php
  • Удаляем старые файлы контроллера и вида из папки application
  • Запускаем сайт ci3.ru/welcome - Все работает!

Ну и это еще не все. Давайте вынесем папку с шаблонами в корень сайта. Скажите как удобно разрабатывая front-end - не разыскивать файлы шаблона по папкам а править и хранить все файлы в одном месте. Давайте добавим небольшую функцию в контроллер персонального загрузчика application/core/MY_Loader.php

class MY_Loader extends MX_Loader {
    public function __construct() {
        parent::__construct();
        $this->_ci_view_paths = array(APPPATH.'../themes/'	=> TRUE);
    }
}

Создадим папку themes в корне сайта и скопируем в него наш приветственный шаблон, добавив приставку _hmvc.php. Напишем новую функцию в контроллере модуля Welcome

public function hmvc()
    {
        $this->load->view('welcome_message_hmvc');
    }
image description

Запускаем, проверяем... работает ;-) Теперь мы можем хранить файлы шаблонов как в папке с модулем(удобно для разработки бэкенда приложения) так и в общей папке themes - для фронденда.

Поздравляю! Вы только что установили последнюю версию фреймворка с модульным расширением, настроили и создали первый модуль. Исходники данного урока - скачать настроенный CodeIgniter 3 + HMVC. В следующем уроке создадим первый модуль - работы со страницами. Пишите комментируйте.

8727 Просмотров Комментариев: 20

/*stalker*/

Ответить

мдаааа.... таких статей в интернете море, зачем писать еще одну(( новые статьи, что выше - на много полезней, пиши больше таких и сайт будет супер!!! Кланяюсь, Сергей aka /*STALKER*/

Алекс

Ответить

Цікава стаття, дякую.

Евгений П.

Ответить

Та немає за що, АЛЕКС.
Заходите на сайт за свежими статьями ;-)

STALLKER, именно подобного движка и подобной серии статей вы не найдете в интернете! Эта статья - только подготовка к созданию полноценного серьезного движка, позволяющего разрабатывать сайты АБСОЛЮТНО любой сложности! Ознакомьтесь с продолжением и вам все станет понятно.

Эдуард

Ответить

Хм, после того как удалил controllers и views - появилась ошибка "Your view folder path does not appear to be set correctly. Please open the following file and correct this: index.php".

Алекс

Ответить

Директорії видаляти непотрібно, лише файли в них.

Эдуард

Ответить

Я предполагал что ошибка может крыться в этом. Большое спасибо за совет!

Артём

Ответить

Евгений, Вы не задумывались подключить дополнительно шаблонизатор Smarty к Codeigniter 3 + HMVC? С такой сборкой действительно будет легко создать свой движок.

Поляков Е.

Ответить

Добрый день, Артем.
Задумывался и очень долго. Дело в том что фундамент подобного движка мы с напарником начинали разрабатывать больше года назад. И в то время по поводу принятия каждого решения - у нас выходили долгие дебаты в скайпе ;) В течении месяца было решено - шаблонизатор мы НЕ используем - и тому есть много причин.

Тогда еще большого опыта работы с SMARTY не было. Но последние пол года плотно приходится его использовать - и нам бы он не подошел. В будущем мы будем часто использовать Module::run - что бы возвращать отрендеренные части view. Иногда будем создавать шаблоны для модуля - блоки - и использоваться php код в шаблонах. ДА у smarty - все функции php в красивой обертке - но он не позволит запустить собственную функцию форматирования текста написанную в библиотеке main_lib к примеру. Так же трудности с использованием фигурных скобок вне шаблонизатора. Самое главное для меня при создании движка - это что бы верстальщик разобрался с шаблонами. Шаблонизатор создан для облегчения жизни верстальщикам - но если верстальщик новичок? Что бы разобраться с синтаксисом smarty нужно владеть php. Значит - это не для новичков. Ну и еще ряд нюансов существует у Смарти.

Я начал писать свой шаблонизатор для движка - но вовремя остановился, так как по ходу своей работы сталкивался с такими сайтами(копался в чужих движках и пару раз натыкался на самописные шаблонизаторы) - в общем кто меня понял - осуждать не будет;)

Яаан

Ответить

Спасибо за ваш труд. Приятный дизайн сайта. Пытаюсь освоить создание сайтов на каком то frameworkе. Вопросов очень много. Буду пытаться понять как и что. Скажите можно к вам обращаться если что-то будет непонятно? Кстати по русски мое имя Ян и не смог вписать имя в комментарии.

Поляков Е.

Ответить

Ян, спасибо большое за приятные отзывы!
Изучение фреймворка - у меня вызывало такие чувства - как будто начинаешь встречаться с новой девушкой и влюбляешься в нее по уши, и уже не представляешь жизнь без нее. вот тоже самое могу оценить фреймворк codeigniter. Он меня просто взбудоражил на долгие дни и ночи в разработке уникальных и универсальных модулей. В общем пробуйте;-)

Да я поставил ограничение - что бы имя состояло минимум из 3х букв. Нужно убрать наверное) Спасибо

Вадим

Ответить

Статnя интересная а де продолжение типа подключить шаблонизатора Smarty. Как его настроить чтобы работал путь и с модулей и с папки шаблона. Как правильно сделать модуль авторизации, разбить в папке шаблоны подпаки с видами шаблонами

Поляков Е.

Ответить

Вадим. По поводу шаблонизатора выше я писал комментарии и свое мнение на счет Smarty. Подключать к нашему движку Smarty мы не будем, уж простите;)

Но в интернете - есть несколько качественных статей как подключить smarty к codeigniter + hmvc - если у вас есть острая необходимость в этом. Но если посмотрите будущие уроки и модули - то поймете - что Смарти нам будет мешать!

Алексей

Ответить

У кого ошибка при включении .htaccess Исправить надо RewriteRule ^(.*)$ /index.php/$1 [L,QSA] на RewriteRule ^(.*)$ /index.php?$1 [L,QSA] Знак вопроса нужен. Изза этого ошибка.

David

Ответить

Как решить эту проблему? Your view folder path does not appear to be set correctly. Please open the following file and correct this: index.php Делал все как на картинках и написано в статье. Правил файл config.php в application/config, замет файл htaccess в application. При написании localhost/mystiye/welcome выдает вот это: Object not found! Как быть?

Эдуард

Ответить

В 'application/core/MY_Loader.php' фреймворк отчаянно ругается на строку: $this->_ci_view_paths = array(FCPATH.'themes/' => TRUE); Говорит, что вместо строки ожидается закрывающая круглая скобка. Что имеет ввиду, совершенно непонятно. Поможите, please, чем можете. APPPATH.'../' я заменил на FCPATH так как в текущей версии фреймворка эта константа указывает на папку сайта. В принципе конечно можно разрабатывать фронтенд в папке views, но хотелось бы понять, чего ей надо?

Lola

Ответить

Попыталась запустить ваш архив mscms-demo.ru, на локальном хосте, сплошные ошибки. Это так и должно быть? :)

Lola

Ответить

Прошу прощения! Там БД была запаролена, что редкое явление :)

Vladimir

Ответить

Сам разбираюсь с 4-ма фреймворками по очереди - CodeIgniter, Yii, Laravel, Symfony. Как раз модульности с коробки (HMVC) в нём не хватает в первую очередь. CodeIgniter хоть и медленно развивается зато очень быстрый, простой, понятный и занимает малов места. Вместо архивов с исходниками нужно было создать отдельный репозиторий на GitHub. Так было бы проще ориентироватся в изменениях.

Lata

Ответить

Евгений! Вопрос начинающего программиста. У вас сайт грузится около 2 сек, это означает, что кэширование в Codeigniter не очень эффективно?

Владимир

Ответить

спасибо за статью. При установке на CI 3.1.3 возникло несколько ошибок: Fatal error: Call to undefined method MY_Loader::_ci_object_to_array() in C:\xampp\htdocs\codeigniter\application\third_party\MX\Loader.php on line 300. Лечится добавлением You can add it back to Loader.php protected function _ci_object_to_array($object) { return is_object($object) ? get_object_vars($object) : $object; }

« Предыдущая статьяВывод checkbox с многомерным массивом PHP MySQL jQuery Следующая статья »Создание движка на CodeIgniter 3 + HMVC. Часть 2 - пишем модули settings и common.