Использование Ion Auth как отдельного модуля в структуре HMVC

Меня интересует использование ion auth для моего проекта, который работает по шаблону HMVC. Приложение написано в Codeigniter.

Проблема, с которой я сталкиваюсь, – это когда ионный auth помещается в папку / app / modules / auth, когда я пытаюсь получить доступ к модулю, я получаю следующую ошибку:

Ошибка HTTP 500 (Внутренняя ошибка сервера) :
Неожиданное условие возникло, когда сервер пытался выполнить запрос.

Пожалуйста, помогите мне здесь, я уверен, что у меня есть какая-то проблема конфигурации / пути, но я просто не могу понять, где.

Я просто загрузил файлы ion_auth из github и поместил извлеченные файлы, так как он находится в папке модуля. Я удалил все строки, где он загружает библиотеки, такие как база данных, сеанс, так как я использовал конфигурацию для автоматической загрузки. Но я оставил загрузку библиотеки ion_auth.

В модульных папках modules / auth у меня есть аналогичная структура приложения с конкретными модулями конфигурации, библиотеками и т. Д.

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

Попробуй это:

  1. Получить: codeigniter.zip (CI2.0)
  2. Извлеките, убедитесь, что он запущен, установите config / config.php
  3. Получить модульное расширение: HMVC
  4. Установите – Скопируйте MY_Loader и MY_Router в / ядро, MX в стороннюю папку. Не копируйте MY_Controller – это для модульного разделения, а не для расширений
  5. Получить Ion_auth
  6. Установите SQL для Ion_auth
  7. Поместите Ion_auth в папку модулей / приложение / модули / пользователей
  8. Добавить маршрут в config / routes.php: $route['auth/(.*)'] = 'users/auth/$1';

  9. Autoload ion_auth – $autoload['libraries'] = array('database','session','users/ion_auth'); autoload $autoload['libraries'] = array('database','session','users/ion_auth');

  10. Редактировать следующие пути в модулях / users / library / ion_auth.php:

     $this->ci->load->config('users/ion_auth', TRUE); $this->ci->load->library('email'); $this->ci->load->library('session'); $this->ci->lang->load('users/ion_auth'); $this->ci->load->model('users/ion_auth_model'); 

Я получил CI 2.1 + Modular Extensions 5.4 + Ion Auth 2, все работающие.

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

Сначала я боролся с этим, но потом мне пришлось сидеть сложа руки и думать о том, что происходит.

После этого на самом деле это было довольно прямолинейно, только пара ошибок …

Шаги, которые я предпринял, чтобы заставить ION AUTH работать с CodeIgniter + MX HMVC

  1. Установите CodeIgnter (я фактически использовал существующий проект, над которым я работал, поэтому это была не новая чистая установка. Я удалил «index.php», и у меня был HMVC, который уже установил рекомендуемый способ. Это все равно Ion Auth.)

  2. Получите последнюю версию Ion Auth.

  3. Вместо установки Ion Auth в application/third_party , application/third_party его и переименуйте полученный каталог в auth . Поместите его в application/modules что приводит к application/modules/auth .

  4. Запустите Ion Auth sql, чтобы настроить таблицы.

  5. В application/config/autoload.php обновите строку до:

     $autoload['libraries'] = array('database','session'); 
  6. В modules/auth/libraries/Ion_auth.php обновите строки в __construct до:

     $this->ci->load->config('auth/ion_auth', TRUE); $this->ci->load->library('email'); $this->ci->load->library('session'); $this->ci->lang->load('auth/ion_auth'); $this->ci->load->model('auth/ion_auth_model') 
  7. В modules/auth/models/ion_auth_model.php обновите строки в __construct до:

     $this->load->config('auth/ion_auth', TRUE); $this->load->helper('cookie'); $this->load->helper('date'); $this->load->library('session'); $this->lang->load('auth/ion_auth'); 
  8. Измените контроллер auth ( modules/auth/controllers/auth.php ), чтобы расширить MX_Controller вместо MX_Controller по умолчанию.

  9. Теперь, в auth.php , убедитесь, что вы изменили все $this->data на $data – (обязательно прочитайте об этом ниже!).

  10. Перемещайте файлы и каталоги в modules/auth/views/auth на modules/auth/views результате чего modules/auth/views не имеют более низкого уровня auth dir – (обязательно прочитайте об этом ниже!).

  11. Добавьте файл route.php в modules / auth / config и добавьте следующую строку:

     $route['auth/(:any)'] = "auth/$1"; 
  12. Теперь перейдите по http://yoursite/auth и все должно быть хорошо!

Gotchas

Сначала … НЕ АВТОЗАПИСЬ БИБЛИОТЕК ИЛИ МОДЕЛЕЙ в файле application/config/autoload.php . Делайте их в модулях явно с помощью $this->load->library("whatever") и т. Д. …

Это немного задержало меня.

Я забыл упомянуть, что в моей текущей установке я уже удалил index.php из URL-адреса, и у меня есть файл .htaccess в базе моей установки. Если что-то не работает, возможно, это что-то с RewriteBase. Это .htaccess, который я использую:

 ## Set up mod_rewrite <IfModule mod_rewrite.c> Options +MultiViews +FollowSymLinks DirectoryIndex index.php index.html # Enable Rewrite Engine # ------------------------------ RewriteEngine On # UPDATE THIS TO POINT TO where you installed this FROM YOUR DOC ROOT. # If this is in the DOC ROOT, leave it as it is #--------------------- RewriteBase / # In case your hosting service doesn't add or remove 'www.' for you, you can # do it here by uncommenting and updating the 'Rewrite*'s below. # # Add or remove 'www.' Whichever you prefer. # This one removes the 'www.' which seems to be the favorable choice these days. # ------------------------------ #RewriteCond %{HTTP_HOST} ^www.<sitename>.com #RewriteRule (.*) http://<sitename>.com/$1 [R=301,L] # Redirect index.php Requests # ------------------------------ RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC] RewriteCond %{THE_REQUEST} !/system/.* RewriteRule (.*?)index\.php/*(.*) $1$2 [R=301,L] # Standard ExpressionEngine Rewrite # ------------------------------ RewriteRule modules/(.+)/controllers/(.+)\.php$ /index.php?/$1/$2 [L,R=301] RewriteRule controllers/(.+)\.php$ /index.php?/$1 [L,R=301] RewriteCond $1 !\.(css|js|gif|jpe?g|png) [NC] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L] </IfModule> 

=================================

Когда я обновлял модули / auth / controllers / auth.php для расширения MX_Controller вместо CI_Controller, после этого я получал ряд ошибок. Первая из этих ошибок:

  A PHP Error was encountered Severity: Notice Message: Undefined property: CI::$data Filename: MX/Controller.php 

Чтобы устранить эту ошибку, я изменил все $this->data на $data в auth.php controller`.

После исправления этой проблемы, когда я auth к auth , я бы получил ошибку:

 Unable to load the requested file: auth/login.php 

По-видимому, он не может найти файлы вида в своем собственном views dir. Ааа. Не совсем верно, хотя подумав об этом. Причина в том, что он пытается найти module/file_to_view а file_to_view должен быть в views ! Не в auth/views/auth !! Таким образом, нам нужно переместиться из каталога auth в каталог views !

После этого все работает отлично! Я могу перегружать модели, библиотеки и контроллеры в других модулях, и я могу выполнять Modules :: run () во взглядах и во всем остальном!

Надеюсь, это поможет кому-то другому. Удачи!

Я не вижу причин, чтобы он не работал. проверить пирокс

Они используют ionauth с hmvc.

если вы не заработаете, просто загрузите файлы в обычные каталоги ci и проверьте, не работает ли это без проблем.

Это то, что я сделал по рекомендации Кьюзера, но с некоторыми изменениями:

  1. Сделайте чистую установку Codeigniter. Настройте config.php, database.php и т. Д.
  2. Установка модульного расширения:
    Переместите third_party / MX в CI / application / third_party.
    Переместите ядро ​​/ MY_Loader.php и core / MY_Router.php в CI / application / core.
  3. Установить Ion Auth:
    Переместите следующие папки Ion Auth в папку CI / application / modules / auth: config, контроллеры, язык, библиотеки, модели.
    Переместите файлы в папке Ion Auth / views в CI / application / modules / auth / views. (Без одного дополнительного уровня auth, как в Ion Auth.)
    Запустите Ion Auth sql в базе данных.
  4. Проверьте это на свойбайт / index.php / auth.

Я написал сценарий bash для получения и установки CodeIgniter 2 + Modular Extensions 5.4 + Ion Auth 2.

Вот. Удачи и дайте мне знать, если с этим возникнут проблемы.

 #! /bin/bash echo " This will install Codeigniter 2, Modular Extensions 5.4 and Ion Auth 2! This script will TRY to download the packages for you. ----------------------------------------------------- The resulting CodeIgniter install is already configured to remove the index.php from the URL and should ALMOST be ready to run! Make sure to read the steps at the end of this. Good luck.. Hit a key to continue or Ctrl-c to cancel now." read ## Download the files echo "Get CodeIgniter" wget -O CodeIgniter.zip http://codeigniter.com/download.php echo "Get Ion Auth" wget --no-check-certificate -O benedmunds-ion-auth.zip https://github.com/benedmunds/CodeIgniter-Ion-Auth/zipball/2 echo "Get Modular Extensions" wget --no-check-certificate -O wiredesignz.zip https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/get/tip.zip ## Unpack all the files echo "Unpack Files" unzip CodeIgniter.zip rm CodeIgniter.zip unzip benedmunds-ion-auth.zip rm benedmunds-ion-auth.zip unzip wiredesignz.zip rm wiredesignz.zip ## Get the Dirs echo "Find Dirs" CI_DIR=`ls -c1 | grep ^CodeIgniter_` ME_DIR=`ls -c1 | grep ^wired` IA_DIR=`ls -c1 | grep ^ben` ## Make Modules Dir echo "Make Modules Dir" mkdir $CI_DIR/application/modules ## Move the Modular Extensions Files Into Place echo "Move Modular Extensions files" mv $ME_DIR/third_party/MX $CI_DIR/application/third_party mv $ME_DIR/core/* $CI_DIR/application/core/ ## Remove the Modular Extension Dir echo "Remove ME Install Dir" rm -rf $ME_DIR ## Make Welcome Module Dir echo "Make Modular Welcome Dir" mkdir -p $CI_DIR/application/modules/welcome/controllers ## Move default welcome controller to the modules dir echo "Move Welcome Controller into Modules" mv $CI_DIR/application/controllers/welcome.php $CI_DIR/application/modules/welcome/controllers/ ## Make Welcome Views Dir echo "Make Welcome Views Dir" mkdir -p $CI_DIR/application/modules/welcome/views ## Move Welcome View into modular dir echo "Move Welcome views into modular Welcome Dir" mv $CI_DIR/application/views/welcome_message.php $CI_DIR/application/modules/welcome/views/ ## Rename Ion Auths Dir to Auth echo "Rename Ion Auth Dir to Auth" mv $IA_DIR $CI_DIR/application/modules/auth ## Update the Welcome Controller to extend MX_Controller instead of CI_Controller echo "Update Welcome Controller to extend MX_Controller" sed -i -e "s/CI_Controller/MX_Controller/" $CI_DIR/application/modules/welcome/controllers/welcome.php ## Update the default autoload file to include database and session libraries echo "Update autoload file to include the database and session libraries" sed -i -e "s/\$autoload\['libraries'] = array()/\$autoload['libraries'] = array('database','session')/" $CI_DIR/application/config/autoload.php ## Update the config file to remove index.php echo "Update config file to remove index.php" sed -i -e "s/\$config\['index_page'] = 'index.php';/\$config['index_page'] = '';/" $CI_DIR/application/config/config.php ## Update the Ion Auth libraries to use the auth resource echo "Update Ion Auth Lib to use the Auth Resources" sed -i -e "s/\$this->ci->load->config('ion_auth', TRUE);/\$this->ci->load->config('auth\/ion_auth', TRUE);/" $CI_DIR/application/modules/auth/libraries/Ion_auth.php sed -i -e "s/\$this->ci->lang->load('ion_auth');/\$this->ci->lang->load('auth\/ion_auth');/" $CI_DIR/application/modules/auth/libraries/Ion_auth.php sed -i -e "s/\$this->ci->load->model('ion_auth_model');/\$this->ci->load->model('auth\/ion_auth_model');/" $CI_DIR/application/modules/auth/libraries/Ion_auth.php ## Update the Ion Auth model to use the auth resource echo "Update the Ion Auth Model to use the Auth Resources" sed -i -e "s/\$this->load->config('ion_auth', TRUE);/\$this->load->config('auth\/ion_auth', TRUE);/" $CI_DIR/application/modules/auth/models/ion_auth_model.php sed -i -e "s/\$this->lang->load('ion_auth')/\$this->lang->load('auth\/ion_auth')/" $CI_DIR/application/modules/auth/models/ion_auth_model.php ## Update the Auth Controller to extend MX_Controller instead of CI_Controller echo "Update Auth Controller to extend MX_Controller" sed -i -e "s/CI_Controller/MX_Controller/" $CI_DIR/application/modules/auth/controllers/auth.php ## Update the Auth Controller so "$this->data" will be "$data" echo "Update the Auth Controller to change \$this->data to \$data" sed -i -e "s/\$this->data/\$data/" $CI_DIR/application/modules/auth/controllers/auth.php ## Move auth/views files up 1 level echo "Move auth/views files up 1 level" mv $CI_DIR/application/modules/auth/views/auth/* $CI_DIR/application/modules/auth/views/ ## Remove the auth/views/auth dir echo "Remove the auth/views/auth dir" rmdir $CI_DIR/application/modules/auth/views/auth ## Make the routes.php file echo "Write the modules/auth/config/routes.php file" echo "<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); /* | ------------------------------------------------------------------------- | URI ROUTING | ------------------------------------------------------------------------- */ \$route['auth/(:any)'] = \"auth/\$1\"; /* End of file routes.php */ /* Location: ./application/config/routes.php */ " > $CI_DIR/application/modules/auth/config/routes.php echo "Creating the $CI_DIR/.htaccess file" echo "## Set up mod_rewrite <IfModule mod_rewrite.c> Options +MultiViews +FollowSymLinks DirectoryIndex index.php index.html # Enable Rewrite Engine # ------------------------------ RewriteEngine On # UPDATE THIS TO POINT TO where you installed this FROM YOUR DOC ROOT. # If this is in the DOC ROOT, leave it as it is #--------------------- RewriteBase / # In case your hosting service doesn't add or remove 'www.' for you, you can # do it here by uncommenting and updating the 'Rewrite*'s below. # # Add or remove 'www.' Whichever you prefer. # This one removes the 'www.' which seems to be the favorable choice these days. # ------------------------------ #RewriteCond %{HTTP_HOST} ^www.<sitename>.com #RewriteRule (.*) http://<sitename>.com/\$1 [R=301,L] # Redirect index.php Requests # ------------------------------ RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC] RewriteCond %{THE_REQUEST} !/system/.* RewriteRule (.*?)index\.php/*(.*) \$1\$2 [R=301,L] # Standard ExpressionEngine Rewrite # ------------------------------ RewriteRule modules/(.+)/controllers/(.+)\.php\$ /index.php?/\$1/\$2 [L,R=301] RewriteRule controllers/(.+)\.php\$ /index.php?/\$1 [L,R=301] RewriteCond \$1 !\.(css|js|gif|jpe?g|png) [NC] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)\$ index.php/\$1 [L] </IfModule>" > $CI_DIR/.htaccess echo " *********** DON'T FORGET THESE STEPS *********** ==================================================================== 6 more steps: ================== 1) Update the \$config['base_url'] var in application/config/config.php 2) Update the \$config['encryption_key'] var in application/config/config.php 3) Update your application/config/database.php file to work with your database, 4) Run the Ion Auth SQL file located in application/modules/auth/sql. 5) Now rename or move everything from $CI_DIR into where you set \$config['base_url'] If you put your CodeIgniter files anywhere other than DOC ROOT you need to do step 6: 6)Update the 'RewriteBase' in the .htaccess file in your CodeIgniter Directory to where your CodeIgniter files are. If your CodeIgniter files ARE IN the DOC ROOT of your webserver, you should be able to run from there like this: --------------- yourdomain.com yourdomain.com/auth If your CodeIgniter files AREN'T IN the DOC ROOT: Remember to update the RewriteBase to point to "your_ci_dir" (see below) in the .htaccess file and you should be able to run like this: -------------------------- yourdomain.com/your_ci_dir yourdomain.com/your_ci_dir/auth ==================================================================== YOU SHOULD BE DONE AFTER FOLLOWING THOSE STEPS! I think you should be up and running! Hope this all works! Please let me know if this worked for you or not! Edmund - edmundchaniii AT gmail.com C'ya! " 

Решения, предоставленные @ciuser и @Dash, работали для меня, но автоматическая загрузка ion_auth не связана с языковыми файлами. Поэтому я сохранил содержимое языковой папки в папке приложения / языка и остался как модуль, который работает как шарм.