I got CI 2.1 + Modular Extensions 5.4 + Ion Auth 2 all working.
Since, I didn't really see any exact info on this and the stuff I did see, had a bunch of things like routing and stuff that I couldn't get working the way they were done, I decided to share the what I did to accomplish this.
At first I was struggling with it, but then I had to sit back and think about what was going on.
After that, it was actually pretty straight forward, only a couple of gotchas…
The Steps I took to get ION AUTH working with CodeIgniter + MX HMVC
Install CodeIgnter (I actually used an existing project I was working on, so it wasn't a fresh clean install. I removed "index.php" and I had HMVC already installed the recommended way. This is about Ion Auth anyway.)
Get the latest version of Ion Auth.
Instead of installing Ion Auth in application/third_party
, Unzip it, and rename the resulting directory to auth
. Put it in application/modules
which results in application/modules/auth
.
Run Ion Auth's sql to set up the tables.
In application/config/autoload.php
update the line to:
$autoload['libraries'] = array('database','session');
In modules/auth/libraries/Ion_auth.php
update the lines in __construct
to:
$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')
In modules/auth/models/ion_auth_model.php
update the lines in __construct
to:
$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');
Change the auth
controller (modules/auth/controllers/auth.php
) to extend MX_Controller
instead of the default CI_Controller
.
Now, in auth.php
, make sure you change all $this->data
to $data
- (Make sure to read about this below!!).
Move the files and directories in modules/auth/views/auth
to modules/auth/views
resulting in modules/auth/views
with no lower level auth
dir - (Make sure to read about this below!!).
Add a routes.php file into modules/auth/config and add the following line:
$route['auth/(:any)'] = "auth/$1";
Now, go to http://yoursite/auth
and everything should be good to go!
Gotchas
First off.. DO NOT AUTOLOAD THE LIBRARIES OR MODELS in the application/config/autoload.php
file. Do them in the modules explicitly with $this->load->library("whatever")
, etc…
That one stumped me for quite a while.
I forgot to mention that in my current install, I have already removed index.php from the URL and I have a .htaccess file in the the base of my installation. If things don't work, it's probably something with the RewriteBase here. This is the .htaccess I use:
## 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>
=================================
When I updated the modules/auth/controllers/auth.php to extend MX_Controller instead of CI_Controller, I was getting a series of errors after. The first of these errors was:
A PHP Error was encountered
Severity: Notice
Message: Undefined property: CI::$data
Filename: MX/Controller.php
To resolve this error, I changed all $this->data
to $data
in the auth.php
controller`.
After fixing this problem, when I would go to auth
, I would get an error like this:
Unable to load the requested file: auth/login.php
Apparently, it can't find the view files in it's own views
dir. Ahh. Not exactly true though after thinking about it. The reason is because it's trying to find module/file_to_view
and the file_to_view
should be in views
! Not in auth/views/auth
!! So, we need to move everyting up from the auth
dir into the views
dir!
After that, everything works fine! I can cross load models, libraries and controllers in other modules and I can do Modules::run() in views and everything else!
I hope this helps someone else. Good Luck!