Tengo CI 2.1 + Extensiones modulares 5.4 + Ion Auth 2 todo funcionando.
Dado que, realmente no vi ninguna información exacta sobre esto y las cosas que vi, tenían un montón de cosas como el enrutamiento y otras cosas que no funcionaba de la forma en que estaban hechas, decidí compartir lo que hice para lograr esto.
Al principio estaba luchando con eso, pero luego tuve que recostarme y pensar en lo que estaba pasando.
Después de eso, en realidad era bastante sencillo, sólo un par de trampas ...
los pasos que tomó para conseguir ION AUTH trabajar con CodeIgniter + MX HMVC
Instalar CodeIgnter (que en realidad utilicé un proyecto existente en el que estaba trabajando, por lo que no fue una instalación nueva y limpia. Eliminé "index.php" y ya tenía HMVC instalado de la manera recomendada. Esto es sobre Ion Auth.)
Get la última versión de Ion Auth.
En lugar de instalar Ion Auth en application/third_party
, descomprímalo y cambie el nombre del directorio resultante a auth
. Póngalo en application/modules
que resulta en application/modules/auth
.
Ejecute Ion Auth's sql para configurar las tablas.
En application/config/autoload.php
actualización de la línea a:
$autoload['libraries'] = array('database','session');
En modules/auth/libraries/Ion_auth.php
actualización de las líneas en __construct
a:
$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')
En modules/auth/models/ion_auth_model.php
actualización de las líneas en __construct
a:
$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');
Cambie el controlador auth
(modules/auth/controllers/auth.php
) para ampliar MX_Controller
en lugar del CI_Controller
predeterminado.
Ahora, en auth.php
, asegúrese de cambiar todas $this->data
a $data
- (Asegúrese de leer sobre esto más adelante !!).
mover los archivos y directorios en modules/auth/views/auth
a modules/auth/views
resultando en modules/auth/views
con no más bajo nivel auth
dir - (Asegúrese de leer sobre esto más adelante !!).
añadir un archivo routes.php en módulos/auth/config y agregue la siguiente línea:
$route['auth/(:any)'] = "auth/$1";
Ahora, vaya a http://yoursite/auth
y todo debe ser bueno para ir!
Gotchas
En primer lugar .. NO Carga automática del bibliotecas o modelos del archivo application/config/autoload.php
. Hágalos en los módulos explícitamente con $this->load->library("whatever")
, etc ...
Ese me dejó perplejo durante bastante tiempo.
Olvidé mencionar que en mi instalación actual, ya he eliminado index.php de la URL y tengo un archivo .htaccess en la base de mi instalación. Si las cosas no funcionan, probablemente sea algo con RewriteBase aquí. Este es el .htaccess que utilizo:
## 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>
=================================
Cuando actualicé los módulos/auth/controllers/auth.php para extender MX_Controller en lugar de CI_Controller, recibí una serie de errores después. El primero de estos errores fue:
A PHP Error was encountered
Severity: Notice
Message: Undefined property: CI::$data
Filename: MX/Controller.php
Para resolver este error, he cambiado todo $this->data
a $data
en el auth.php
controlador`.
Después de solucionar este problema, cuando iba a auth
, me gustaría tener un error como este:
Unable to load the requested file: auth/login.php
Al parecer, no puedo encontrar los archivos de vista en su propio views
dir. Ahh. No es cierto, sin embargo, después de pensarlo. La razón es porque está tratando de encontrar module/file_to_view
y el file_to_view
debe estar en views
! No en auth/views/auth
!! Por lo tanto, tenemos que mover todo desde el directorio auth
en el directorio views
!
¡Después de eso, todo funciona bien! Puedo cargar modelos, librerías y controladores en otros módulos y puedo hacer Modules :: run() en vistas y todo lo demás.
Espero que esto ayude a alguien más. ¡Buena suerte!
Gracias, Krish, verificaré con pyrocms y te mantendré informado. –