Categorized | News

Overview of Current PHP App Frameworks

Posted on 20 March 2003 by Demian Turner

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.)

 

Bookmark and Share

30 Comments For This Post

  1. Anonymous Says:

    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

  2. Anonymous Says:

    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.

  3. demian Says:

    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

  4. Anonymous Says:

    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.

  5. Anonymous Says:

    Hi,

    I\’ve got a fairly simple question.

    What is exactly the main difference between a framework and a set of libraries?

    Greetings Laurens.

  6. demian Says:

    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 :-)

  7. Anonymous Says:

    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.

  8. Anonymous Says:

    … 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).

  9. hlellelid Says:

    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

  10. demian Says:

    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.

  11. Anonymous Says:

    I think people in http://www.fusebox.org/index.cfm?&fuseaction=learn.faq#q1 will have different opinion about definition of\"framework\".

  12. hlellelid Says:

    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

  13. hlellelid Says:

    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/

  14. jbellis Says:

    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

  15. jbellis Says:

    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

  16. demian Says:

    > 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.

  17. Anonymous Says:

    \"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.

  18. jbellis Says:

    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

  19. Anonymous Says:

    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();

    }

    }

    }

  20. hlellelid Says:

    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

  21. Anonymous Says:

    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

  22. tychay Says:

    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

  23. Anonymous Says:

    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

  24. demian Says:

    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

  25. Anonymous Says:

    Oh i forgot Eclipse which seems the only one that i didn\’t see anyone person criticise…yet :)

  26. demian Says:

    Eclipse
    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 ๐Ÿ˜‰ On the upside, it has to
    be said that the API docs for Eclipse are quite complete and very
    readable. My concerns were:

    • a lot of the functionality is also offered in PEAR, like the DB abstraction
      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?
    • Eclipse uses wrapper classes like ‘ArrayIterator’ for already
      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
      :

      • This set of classes looks really nice if you use the MVC model. But a word
        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

    • adherence to agreed standards
    • insistence high quality code
    • management of package dependencies

    which I suppose is why they’ve been accepted as the CPAN of PHP.

  27. Anonymous Says:

    A template engine
    simply , strong and powerful ๐Ÿ˜‰
    http://tpln.sourceforge.net

  28. rycamor Says:

    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

  29. joshbachynski Says:

    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

  30. ooopinionsss Says:

    How you think when the economic crisis will end? I wish to make statistics of independent opinions!

Leave a Reply

Categories

Books

Demian Turner's currently-reading book recommendations, reviews, favorite quotes, book clubs, book trivia, book lists

Facebook