Использование Ion Auth в качестве отдельного модуля в структуре HMVC - PullRequest
6 голосов
/ 15 июня 2011

Я заинтересован в использовании ионной аутентификации для моего проекта, работающего по схеме HMVC.Приложение написано на Codeigniter.

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

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

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

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

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

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

Ответы [ 6 ]

10 голосов
/ 25 декабря 2011

Я получил 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, Распакуйте его и переименуйте получившийся прямойОри до auth.Поместите его в application/modules, что приведет к application/modules/auth.

  4. Запустите sql Ion Auth для настройки таблиц.

  5. In application/config/autoload.php обновить строку:

    $autoload['libraries'] = array('database','session');
    
  6. In 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. Inmodules/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 вместо значения по умолчанию CI_Controller.

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

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

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

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

Gotchas

Прежде всего .. НЕ РАЗГРУЖАЙТЕ БИБЛИОТЕКИ ИЛИ МОДЕЛИ в tон application/config/autoload.php файл.Делайте их в модулях явным образом с помощью $this->load->library("whatever") и т. Д. *

Это меня давно озадачило.

Я забыл упомянуть, что в своей текущей установке я уже удалил индекс.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, я получал ошибку, подобную этой:

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

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

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

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

10 голосов
/ 10 августа 2011

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

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

  9. Автозагрузка ion_auth - $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');
    
1 голос
/ 05 января 2012

Я написал bash-скрипт для получения и установки CodeIgniter 2 + Модульные расширения 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!

"
1 голос
/ 29 октября 2011

Это то, что я сделал, следуя указаниям ciuser, но с некоторыми изменениями:

  1. Выполните чистую установку Codeigniter. Настройте config.php, database.php и т. Д.
  2. Установка модульного расширения:
    Переместите Third_party / MX в CI / application / third_party.
    Переместите core / 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. (Без одного дополнительного слоя аутентификации как в Ion Auth.)
    Запустите Ion Auth sql в базе данных.
  4. Проверьте это на yourbaseurl / index.php / auth.
1 голос
/ 15 июня 2011

Не вижу причин, чтобы это не работало.проверьте pyrocms

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

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

0 голосов
/ 14 июля 2013

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...