mod-framework: PHP, light and easy

I know there’s already infinite PHP framework out there, trying to be rails; and most of them are doing it really well, I just feel that none of them completely embrace the simplicity of convention over configuration, so I’m trying to build one that ticks all the boxes.

It’s pretty simple so far, and is only a few hundred KB, but I think it’s got some cool features, and maybe even potential.

Like the other stuff it’s under a Creative-Commons SA license and can be found at:

http://mod-framework.googlecode.com/.

Any opinions, suggestions, contributions would be gratefully received.

Current functionality:

Model-View-Controller system
MySQL support (using a modified version of the DB class from earlier)
script/server implementation in PHP
Helper association, so if you create a PageHelper class for your Pages controller all the functions will automatically be made ‘global’ (accessible view functionname() instead of Helper::functionname())
Includes mootools in the htdocs folder

The DB doesn’t work quite how I would have imagined it to (well, with PHP 5.3 it might… but I haven’t got it yet…) so currently any models are added to $GLOBALS[] so that for a Page model, $GLOBALS[‘Page’]->find_by_name(‘dom’), etc would work.

There’s probably some other stuff in there too…

DB

Here’s a little script I’ve wanted to make for a while, but have only just finally got the motivation to work on.

It’s a lightweight Database wrapper with functions similar to Ruby on Rails’ ActiveRecord.

When I discovered the __call() method I wanted to make my own version in PHP, so here it is!

It supports most basic functions, all based on the MySQL set of PHP functions, no other wrapper is required (PEAR etc.). There is not (yet?) any automatic mysql_real_escape_string or anything, although that could easily be added if required, my assumption is you’ve done that kind of thing already before passing anything to it.

$db = new DB('mysql://username:password@server:port/database');
$people = $db->table('people');
$companies = $db->table('companies');

$company = $company->find_by_name_like('%test%');

$person = $people->create(
  array(
    'name' => 'Dom',
    'company_id' => $company->id,
    'created_date' => date('Y-m-d H:i:s')
  )
);

$id = $people->lastId();
$dom = $people->find($id);

print $person->name;
// Dom

print $dom->name;
// Dom

$dom = $person;
$new_users = $person->find_by_created_date_before(date('Y-m-d H:i:s', strtotime('1 hour ago')));

foreach ($new_users as $user) {
  // loop through all the users with a create date more than 1 hour ago
  if (!$company->find($user->company_id)) {
    // and delete any that don't have a company associated with them
    $people->delete($user->id);
  }
}

It’s only a first draft, so any comments, questions or pointing out any typo’s in the code, (yeah, there are likely to be a few…) would be muchly appreciated.

This work is free under the Creative Commons Share Alike 2.0 license.

Download:

DB_0.1.tar.gz (4.84Kb)

Edit: Think next on my list is TextMate syntax highlighting and maybe the non-default template…