From a post by Jonathan Ellis on PHPBuilder, some nice provocative comments, anyone have any interesting experiences?
I recently checked up on just about every PHP application framework I could find. I thought I’d throw my conclusions out for anyone else who was looking for something similar.
What I was looking for:
Not a whole lot, really. basics like user management (including admin controls for deleting, banning, …), permissions, maybe a tried-and-tested utility library. Has to run on postgresql, because — no flames, please
— once you have experienced coding on a real database with views, triggers, subqueries, etc. you can’t go back.
What I found:
(Some of these aren’t exactly app frameworks, but enough people thought of them that way for them to show up on my searches so I’ll include them too.)








March 20th, 2003 at 3:11 pm
BinaryClound does not require XSLT. It’s framework has always used Smarty as the default templating scheme with XSLT as an option. I don’t know what you’ve been smoking since I haven’t been an active developer on BC for over a year and even I remember that. (I can’t comment on the rest.)
Other frameworks/libraries worth looking at:
Yes, a lot of these are libraries, but considering what you want to do, a library will handle this more than amply. As for PostGres being a requirement, it is easy to write an adapter.
For what you want, try LiveUser in PEAR. I believe it has a DB or MDB abstraction to use PostGres.
terry chay
March 20th, 2003 at 5:16 pm
You might want to look at Eocene.
It doesn\’t have a huge user base, but in all fairness it is pretty new.
The concept is relativly easy MVC Model with a Front Controller. The author calls it a Front Controller Design Pattern.
It is pluggable, however the Beta includes a Smarty Engine as well as its own \’no fluff\’ Template Engine.
Uses 1 Config file (Is XML but I agree with using it.)
There is talk of including ADODB into the next release for Abstraction.
http://www.eocene.net
Have a look.
March 21st, 2003 at 3:15 am
hadn\’t seen STPHPlib before but looks like PEAR\’s Quickform might be more encompassing. The buttons rock!
Vulcan SRM is great but more for a select audience, not that many PHP users have to facility to recompile.
NetUSE, the PHPlib people, are they still distributing .php3 code – the german example lost me.
Ismo – they\’ll be lucky if that cat doesn\’t scare off new recruits. Basic ideas look good but a lot of complexity to validate an email address, no? If you make the app framework too complex you seriously reduce it\’s takeup by developers. Look at popular Java frameworks like Struts, everything is in the right place
Have you tried DB_DataObject from PEAR?
–
Demian
March 21st, 2003 at 3:21 am
I\’m the project lead and the system designer (or maybe
\"design herder\") for binarycloud… read your article. I wanted
to know where you read the XSLT stuff so I can correct it,
because if you\’ve thought it I guarantee someone else has
as well. If you\’ve read mr chay\’s comment you know that
smarty is the default template engine, and we\’ve designed a
system that cound\’t care less. Bob\’s hacked up Template-O-
Matic or XSL, we do it all.
A quick note about the data layer: actually we do have a
sophisticated data model, but we have decided that it is in
fact… not sophisticated _enough_, so (after some work with
exceptions) we\’re going to decide what to do about that. I
think it may end up being something like EOF (webobjects)
and Hibernate (http://hibernate.bluemars.net). Though it
_may_ have to wait until ZE2 for performance reasons, we\’ll
see.
March 21st, 2003 at 3:38 am
Hi,
I\’ve got a fairly simple question.
What is exactly the main difference between a framework and a set of libraries?
Greetings Laurens.
March 21st, 2003 at 3:52 am
an app framework is an integrated set of files that work together to provide basic application services like
- authentication
- permission management
- request/response mechanism
- templating
- locale/internationalisation handling
- etc
The big attraction, one presumes, is that developers can use frameworks for RAD development of modules without having to worry about application infrastructure. Like what .NET (ooh) claims to offer.
PEAR is a good example of a set of libraries that aids in the building of the above functionality, but each library is independant and accomplishes a single, focused task. Examples of PEAR libararies:
- LiveUser: User authentication and permission management framework
- DB_DataObject: an Object Interface to Database Tables
… something like that anyways
March 21st, 2003 at 4:35 am
EzSDK is a complete development environment plus a complete operations framework. A developer is immediately able to use the EzEnvironment which provides user application and data management, virtual multi-tasking desktop through HTML, Mozilla 1.3 compatibility, GUI interface able to be changed in seconds by even the user easily through templates or individual items, very functional application interface that is also very appealing, DB connectivity to any source even simultaneously, Source management, Buiult in Report Builder that eliminates the need for Crystal Reports, and there is much more. It is the full Monty! I encourageanyone serious about PHP or cross platform development to check this out. It is new and truly is the most encompassing offering to date.
March 21st, 2003 at 5:30 am
… Right, so where did the \"data model\" requirement come
from? IMHO, an app framework may provide a means of
interfacing w/ an RDBMS, but actually providing table
schemas is certainly not a requirement for an _application
framework_ (in fact, I\’d argue the opposite).
March 21st, 2003 at 5:48 am
Lots of erronious stuff here. A couple quick points:
- There is a GPL licensed (free) Krysalis also available.
- There is a pure PHP version of Midgard available
\"Midgard-Lite\".
More generally, the author really doesn\’t seem to have
spent any time with these packages … or they\’d
understand:
1) That Krysalis is an XML publishing platform explicitly
based on Cocoon. To criticize Krysalis for being
XML-centric is like criticizing PHP for being a web
scripting language.
2) Horde is not DB-centric, but rather is built on the
ability to swap out backend drivers. This has many
advantages; SQL efficiency is probably not one of them.
Before criticizing Horde for using a username as the
primary key, the author needs to explain how one should
use numeric IDs to manage the unicity of accounts
authenticated against FTP, DB, LDAP, SMB, unix passwd,
Radius, etc. (what do they all have in common…?)
3) Binarycloud. Others have corrected author\’s notions on
this already, but I would only add that BC has actually
provided an _extremely_ elegant solution in its XML-based
definition & configuration system. The power of XML
combined with compile-time XSLT means, e.g., that a single
definition file can create 1) the MDB/Metabase schema to
create/update database definition, 2) the PHP class that
will manage a content entity & related entities, 3) a
default FORM to add or edit data for an entity, 4) a set
of rules describing role access to an entity, etc., etc.
None of the other frameworks on this list boast that type
of capability.
A truly dismal \"review\".
Hans Lellelid
March 21st, 2003 at 5:51 am
i\’d always thought an app framework needed a basic concept of users/groups for perms/auth, how can you design this without a data model? I must be misunderstanding you.
March 21st, 2003 at 6:08 am
I think people in http://www.fusebox.org/index.cfm?&fuseaction=learn.faq#q1 will have different opinion about definition of\"framework\".
March 21st, 2003 at 6:34 am
An app framework doesn\’t have to authenticate from a DB,
right? — Frameworks do generally include an
authenticator that lets you describe the authentication
table. Horde & Binarycloud both do this. Horde provides
an example/basic table structure to do authentication.
Binarycloud provides a SQLAuthenticator which lets you
describe the table that you want to use for
authentication.
I think that when you start looking at group management
and permission, you move very quickly into an area that
can vary a great deal depending on your app requirements.
At this point, I believe, the framework should simply
provide a framework for setting up your own group-user
requirements, and perhaps a base Gorup/GroupManager class
that can be extended to handle app-specific
implementation.
Hans
March 21st, 2003 at 6:39 am
Others to look at:
- eZ Publish -
Has some strong points, is a pretty flexible framework.
Did a lot of wheel re-inventing for templates & db
abstraction, but the suite is pretty complete and
architecture not bad.
http://ez.no/
- Syntax -
This is a CMF, but has some basic app framework stuff –
like authentication. Might suffice for your needs. I
used to be in charge of predecessor PHlexDB project, so
I\’m a little biased. Syntax does some things very well
(content inter-relationship), some things just ok
(permissions system is pretty basic), and some things not
at all [yet] (i18n).
http://syntax.forumone.com/
March 21st, 2003 at 6:40 am
Since none of the points you make point out actual errors in what I wrote, perhaps you should reconsider calling it \"erronious.\"
1) I wasn\’t looking for anything overcomplicating the web app problem, and as should be clear from context, IMO XML falls under that category. So if you think XML is the answer to everything by all means have at it, but for me it\’s as if I were looking for a compiled systems programming language and someone recommended PHP. Stating \"it\’s a web scripting language\" and moving on isn\’t clueless criticism; it\’s a statement of fact of why it is not suitible for my purpose.
2) again, you don\’t point out any errors, but complain rather feebly that I am not allowed to criticiz Horde\’s datamodel without completely explaining absolutely basic concepts. This is a quick overview of php frameworks; a beginner\’s sql tutorial is another subject entirely.
3) Again, this is a difference of opinion — you love XML-centric \"metaprogramming.\" I have found it to be rather less productive than more.
-Jonathan
March 21st, 2003 at 6:49 am
this is an example of misguided abstraction.
first, 99% or more of web apps will be authenticating against a database, so not providing a users table because of the 1% who might want to use LDAP or whatever is foolish.
second, even where the actual auth is done externally, by not providing a real users table — or allowing the tablename to be softcoded — you have additionaly precluded yourself from including any other modules from joining the users table in foreign keys, views, or stored procedures.
perhaps this mistake is so common because MySQL has confused so many developers into retarded thinking like \"foreign keys are not good in production code\" and \"views are for people too lazy to code the same join ad nauseum.\" But whatever the reason, it results in a crippling mindset in these frameworks\’ design.
-Jonathan
March 21st, 2003 at 6:49 am
> I think that when you start looking at group management
> and permission, you move very quickly into an area that
> can vary a great deal depending on your app requirements.
> At this point, I believe, the framework should simply
> provide a framework for setting up your own group-user
> requirements, and perhaps a base Gorup/GroupManager class
> that can be extended to handle app-specific
> implementation.
agreed totally, but even such basics need a data model, how else to map users to groups?
I\’m probably preaching to the converted by saying that PEAR has a pretty generously featured Auth package that does this as well, current containers are:
* All databases supported by the PEAR database layer
* Plaintext files
* LDAP servers
* POP3 servers
* IMAP servers
* vpopmail accounts
* RADIUS
* SOAP
More recently LiveUser has been announced, although currently in alpha it looks very promising. Taken from the PEAR description:
The LoginManager class takes care of the login process and can be configured
to use a certain permission container and one or more different auth containers.
That means, you can have your users\’ data scattered amongst many data containers
and have the LoginManager try each defined container until the user is found.
For example, you can have all website users who can apply for a new account online
on the webserver\’s local database. Also, you want to enable all your company\’s
employees to login to the site without the need to create new accounts for all of
them. To achieve that, a second container can be defined to be used by the LoginManager.
March 21st, 2003 at 6:59 am
\"Data model\" doesn\’t necessarily imply RDBMS. It\’s
a logical description of data relationships which in
practice most often has a physical mapping to DB
tables, but it doesn\’t require a DB to be useful.
March 21st, 2003 at 7:00 am
Googling site:binarycloud.com xslt didn\’t show anything that rang a bell with my memory. Either I was smoking something, in which case you have my appologies, or the site has been updated in the meantime. (This overview was written back in early December, so perhaps that\’s not surprising.)
-Jonathan
March 21st, 2003 at 7:07 am
I’m not crazy about ezPublish, have you looked at the source, *very* procedural:
if ( isSet( $OK ) )
{
if ( $CompanyEdit
)
{
if ( $Action == “edit” || $Action == “update” )
{
if (
!eZPermission::checkPermission( $user,
“eZContact”, “CompanyModify” ) )
{
include_once(
“classes/ezhttptool.php” );
eZHTTPTool::header( “Location: /contact/nopermission/company/edit” );
exit();
}
}
else if ( $Action == “new” || $Action == “insert” )
{
if (
!eZPermission::checkPermission( $user,
“eZContact”, “CompanyAdd” ) )
{
include_once(
“classes/ezhttptool.php” );
eZHTTPTool::header( “Location: /contact/nopermission/company/new” );
exit();
}
}
}
March 21st, 2003 at 7:17 am
Hi Jonathan,
As far as errors, I think it was clear that not only is
Krysalis not commercial (or not only commercial), but
Midgard need not be a compiled module — which seemed to
be a main reason for your disliking it.
As far as your assessment of Horde, I think it simply
illustrated that you had not actually understood what it
is that Horde is doing. Do you seriously think that no
one thought about the Horde data model? My point was
simply that if you had actually looked at the various
Horde applications, and understood the fact that in many
(perhaps most) Horde installs the user is being
authenticated against IMAP — and so the of course the
username is going to be the primarykey and foreign key
when it comes to group & permission management etc.
As far as XML, you don\’t have to use it. I certainly
don\’t think it\’s the answer for everything, but it does
provide some advantages for some things.
Hans
March 21st, 2003 at 9:36 am
Yeah — I\’m not crazy about it either. With their latest
version, though, they\’ve identified some of the big things
that were missing in the past. I think especially the
idea of customized content entities. You no longer have
to use / modify one of the stock \"modules\".
I like the way the modules plug into the admin framework.
It\’s pretty simple, but it seems to work.
I don\’t like the code that much. You\’re right that it\’s
very procedural – thouguh encapsulated in objects for the
most part. Some of the code is good, but a lot of it is
kinda needless (why not use, e.g., Smarty instead of
writing their own template engine — and why not use
PEAR::DB/ADOdb/Metabase for db abstraction).
HL
March 21st, 2003 at 9:51 am
Yes, I’ve tried DB_Dataobject from PEAR. I find it too much abstraction?this is a personal view, YMMV!.
Instead what I do is make a facade into the database with a Data Access Object (only even lazier!). Yes, there is a bit of extra “copy-paste” crimes committed in the name of DAO, but if you keep refactoring you?ll find that you can eventually remove most of it. Note: DAO and DB abstraction layers serve two different purposes. Just like DB_DataObject uses PEAR DB (and later MDB), so a DAO can be used with any DB abstraction?one abstracts the data, the other the database connection!
If you want a more formalized version of DAO, you can find it as part of Extreme PHP Library with a tutorial even!
Take care,
terry chay
March 27th, 2003 at 1:39 am
Hello demian,
Your article is quite short but give an idea before going by ourselves.
I don\’t know what to really think of BinaryCloud and Krysalis but whatever and anyway, i think of these ones missed in your article, keeping only the ones that seems to be interesting :
- Plankton http://www.sea-incorporated.com/plankton/
- Eocene.net (quite new…)
- Fusebox, you should know.
- Ampoliros.com (well it\’s more a platform than a framework)
- ezPublish, you should either know.
What do think of them if you know ?
Alex
March 27th, 2003 at 1:42 am
Hi Alex,
thanks for your email, a number of these have already been covered on PHPkitchen, you can do a search on
- plankton
- eocene
- ezpublish
There seems to be a lot of activity in the PHP community for building \"the killer\" framework, and from what I\’ve seen all the competition is quite different. I personally didn\’t like ezPublish, hence my comment on the procedural code. With Eocene the theory sounded good but:
- the example they offer for download is 5MB !!
- they\’re using a lot of aliases for existing PHP functions
- the code examples in the manual use globals
- seems like a lot of code for little results
Plankton, went over the docs with a fine-toothed comb, it\’s definitely a LOT more work to write an app in that framework than to hard-code the whole system yourself.
Ampoliros I haven\’t looked at yet, they seem to have a growing community. Overall I\’ve been mosted impressed by Horde\’s vision, but would prefer something more involved with PEAR.
cheers,
Demian
March 27th, 2003 at 1:46 am
Oh i forgot Eclipse which seems the only one that i didn\’t see anyone person criticise…yet
March 27th, 2003 at 2:13 am
Eclipse
On the upside, it has to
is a collection of 24 files that makes writing OOP code in PHP easier.
The lack of nested folder structure is refreshing compared to some other
candidates in this framework discussion
be said that the API docs for Eclipse are quite complete and very
readable. My concerns were:
layer, and which do you think is going to be better maintained, this
project or PEAR that has a small army of programmers behind it?
existing PHP functions, to be more ‘java-like’ I suppose. A
similar approach is offered by the Phrame people. Last December
John Lim of PHP Everywhere fame commented
:
of advice: chefs say one of the hallmarks of good cooking is that the natural
flavours of the ingredients should be retained, and not disguised; it seems
silly to make roast beef taste like chicken. Similarly, when using PHP, we
should be using natural built-in PHP constructs. The designers rejected the more
idiomatic foreach loop and PHP arrays, and decided to reinvent the wheel in
their HashMap (just a hashed array), ListIterator (foreach) and ArrayList
(array), Stack (use array_pop and array_push instead) classes.
I didn’t agree with this at the time but now it makes sense to me – if you
want a Java-like approach to coding then use Java!
Think about the problem in reverse, imagine you got to the stage with your
own development that you put together a great package or library to solve a
certain web problem, and you wanted to contribute back to the PHP community.
Well you couldn’t contribute code full of “ArrayIterator’ dependencies
could you? For this reason I personally believe that PEAR has struck the right balance with a focus on
which I suppose is why they’ve been accepted as the CPAN of PHP.
March 27th, 2003 at 9:58 am
A template engine
simply , strong and powerful
http://tpln.sourceforge.net
March 28th, 2003 at 5:15 pm
I don\’t if I would go as far as hlellelid in critique, but the database part of your review left me bristling, too.
The choice of a natural primary key instead of a synthetic one is _quite often_ perfectly valid in a database model (not \"data model\"). In fact, there are many very educated DB thinkers who believe this is the better choice, when applicable. This is a debated subject, of course. just visit comp.databases.theory. But, calling someone \"clueless\" for using a natural key only show\’s your own lack of knowledge.
Sorry
February 18th, 2004 at 2:33 pm
Sifting through the bones of this dead discussion I thought I’d add my two cents.
A new PHP based CMS and Framework called Sitellite has been relased as GPL by a company called Simian Systems. It has all the basic user management features that you were looking for and much, much more.
Unfortunately however it works with MySQL. You’d have to write a driver for it to work with PostGreSQL. But even still the feature set that it has with MySQL is still pretty impressive, which includes:
-Advanced Template System
-DBI-inspired Database Abstraction Layer
-Sophisticated Form Generator/Validator/Handler
-Code-Level Caching Mechanism
-Lightweight XML/XSLT libraries
-DocReader, a new class documentation tool that utilizes XML.
-PEAR Compatible
Sitellite 4 CMS and Framework clearly blows all of these other frameworks out of the water. Check it out at http://sitellite.org
josh
December 3rd, 2008 at 5:27 am
How you think when the economic crisis will end? I wish to make statistics of independent opinions!