Hi everyone,
Now that I’ve got my FreeBSD virtual machine set up with the various PHP frameworks, it’s time to start putting together a sample application in each one to learn their strengths and weaknesses. The sample application will be a simple mailing list manager and contain common features such as:
- User account self-registration
- Email generation
- Management interface
- MySQL database backend
I think that will exercise enough of each framework to get a good handle on their functionality and ease of use.
I’m starting off with CodeIgniter. At first glance, the documentation seems excellent, and the code is commented very clearly. Looking at the index.php
file in the root installation directory (/usr/local/www/codeigniter
on FreeBSD), I see:
/*
|—————————————————————
| APPLICATION FOLDER NAME
|—————————————————————
|
| If you want this front controller to use a different "application"
| folder then the default one you can set its name here. The folder
| can also be renamed or relocated anywhere on your server.
| For more info please see the user guide:
| http://www.codeigniter.com/user_guide/general/managing_apps.html
|
|
| NO TRAILING SLASH!
|
*/
$application_folder = "application";
Ok, that seems easy enough. To keep the default application intact and start working on my custom application, I simply copied the existing application directory to /usr/local/www/ci_sourcehosting
and updated the index.php
file.
$application_folder = "/usr/local/www/ci_sourcehosting";
According to the welcome page displayed by CodeIgniter, I have to change the views/welcome_message.php
file to change the default page contents. Ok, easy enough…

The controllers/welcome.php
controller is called by default, and that’s configured in the config/routes.php
file in your application directory.
To create a new controller, simply create a new class that extends Controller and name it with a capital letter. Save the new class to the lowercase version of the class name into the /controllers
directory, and you’re ready to test.
My simple class is:
class User extends Controller {
function index()
{
echo ‘Welcome to the user controller’;
}
function count-users()
{
echo ‘There are 0 users defined’;
}
}
When I visit http://192.168.95.128/codeigniter/user
, I see:
Welcome to the user controller
and http://192.168.95.128/codeigniter/user/count-users
displays:
There are 0 users defined
Ok, that’s pretty straightforward, but I did have to do a bit of mucking about to get the URLs to look like http://192.168.95.128/codeigniter/user/count
instead of http://192.168.95.128/<strong>index.php</strong>/codeigniter/user/count
.
The CodeIgniter manual specifies a .htaccess file to be placed in the directory where the index.php front controller is located:
RewriteEngine on
RewriteCond $1 !^(index.php|images|robots.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
Normally, this works fine, except Apache 2.2 specifies AllowOverride None
by default, so .htaccess files don’t work. After changing that, I had to make one small change to the .htaccess file, since my CodeIgniter installation is rooted at /codeigniter
:
RewriteRule ^(.*)$ /codeigniter/index.php/$1 [L]
Next time, we’ll take a look at hooking CodeIgniter to MySQL.