[geeklog-devel] Geeklog 2 Framework Code in Action

Tony Bibbs tony at tonybibbs.com
Thu Dec 2 10:41:31 EST 2004


For time sake I have attached the code I have already.  The code is for 
a sample Hunting Log Book application. It has a little bit of everything 
but is far from complete.  I'm sending this because Vinny is chompin' at 
the bit to get started.  I wrote this sample application to demonstrate 
a few things:

1) use of MVCnPHP and how it allows us to generate small, atomic and 
easily managed code.
2) use of Propel...without it the code would be at least 300% bigger
3) use of a Data Access Object.  This object uses propel and hides the 
propel details from the developer for the most part.  Thus GL2 
developers should have to write very little SQL
4) use of named queries
5) use of the PEAR::HTML_Template_Flexy engine
6) concepts on how to do data validation and formating in this new 
paradigm.  I'm not 100% satisfied with what I have but it is a step in 
the direction I think it should go.
7) This shows the use of a List Of Values table.  It is a single table 
that can be reused to multiple times for look up values.  This is 
probably something many of you are familiar with but I wanted to point 
this out because it reduces the number of data structures we'd need 
considerably since look-up tables can now all reside in a single table 
structure.

As you view this, *please* ignore the layout...I'm not a layout guy.   
Here are the things worth noting.

First, don't look into the underlying framework code too much until you 
get a feel for the basic code.  Specifically, your first gander should 
focus on code in the following directories:

/path/to/HuntingLog/commands
/path/to/HuntingLog/views
/path/to/HuntingLog/templates

That's where the magic happens.  The commands and views directory are 
where the MVCnPHP commands and views go respectively.  Take time to 
notice and, hopefully, appreciate how little code exists in many of 
them.  Granted my sample application is quite trivial, but try and draw 
comparison's to how much code you would write to do the same thing with 
the 1.3.x code.  After you do that, there are some abstract classes in 
each of those directories that so some basic setup stuff.  You should 
look into those and understand them as we'll need to

The templates directory is where the Flexy templates go.  The layout I 
have defined in this app doesn't support the notion of a theme...I can 
add that later with little trouble as it is just a matter of how we want 
to layout the directories.  I haven't exercised all the features of 
flexy in the views I have but it does do the most common things.  Flexy 
works quite differently from PHPLib that 1.3.x so I would read up on the 
documentation for it. 

You'll notice this code in the commands and views have absolutely no SQL 
in them.  Propel should generate 90% of the SQL and the other 10% must 
go into the /path/to/system/Data_Access/NamedQueries.xml.  I'm sure 
there will be a debate as to why all custom SQL must go in an XML file 
so here are a few reasons:

1) Cleaner code in the commands/views.  It isn't muddled with SQL
2) Having the SQL in a single file allows us to reuse queries and gives 
us a single place for making modifcations should the DB structures change. 
3) The biggest benefit which isn't implemented yet, is that I can use 
the queries in that XML file and generate a single PHPUnit2 script that 
would regression test all the queries with a single command.  This is a 
huge time saver in the case where we have massive structure updates that 
will undoubtedly happen during alpha development.  Again, this isn't 
implemented but I'm working on it now.

Also missing from this implementation is the ability to allow more than 
one query XML file.  This will be required for plugins as it will allow 
them to manage their own file for named queries seperate form those used 
by the core GL2 kernel.

Here are the crude instructions for installing this. NOTE: Phing is not 
required but Propel is because I haven't packaged the code into this 
tarball. In the first GL2 alpha we'd obviously fix that but I don't want 
anyone freaking about about requireing Propel.  Oh, and you'll notice 
Propel requires Phing...this is only for doing builds.  I've already 
done the build for the app in this case.  If you want a copy of this 
tarball modified to include the Propel code please let me know...I'd be 
more than happy to do it since installing Propel can be a bit tricky.

1) Make sure you have PHP5 ;-)
2) unpack into webtree
3) Make sure you have a version of MySQL that supports INNODB and 
foreign keys.
4) create a database for this sample app
5) Import /path/to/HuntingLog/data/create.sql into your database
6) edit config.php to match your system
7) edit the database settings in 
/path/to/HuntingLog/system/Propel/HuntingLog-conf.php
8) Now open browser and point it to index.php

Please only review it for the features I have noted.  This is meant to 
be a throw away prototype and I assume we'll make many changes in the 
short term to the framework.  By all means fire over any questions.  If 
you have no questions but get it installed successfully even letting me 
know you got it installed would be nice.

--Tony
-------------- next part --------------
A non-text attachment was scrubbed...
Name: HuntingLog.tar.gz
Type: application/gzip
Size: 117195 bytes
Desc: not available
URL: <https://pairlist8.pair.net/pipermail/geeklog-devel/attachments/20041202/1e223603/attachment.gz>


More information about the geeklog-devel mailing list