There are so many PHP frameworks, that it's time to keep track of them and keep comparitive reviews. ==== PHP Frameworks ==== * [[MVCLIB]] * [[Blue Shoes]] * [[Binary Cloud]] * [[http://////de.geocities.com/ggf_team/index.htm|The GGF Project]] - PHP5, object oriented, generates SQL and HTML * [[http://www.thinkcomputer.com/software/lampshade/index.html|Lampshade]] * [[http://www.artypapers.com/about/| Artypapers isn't open but has been used to create some fantastic apps]] * [[http://seagull.phpkitchen.com/|Seagull]] * [[http://cakephp.org/|Cake]] * [[http://www.logicreate.com/index.php/html/logicreate/basiclc.html|LogiCreate]] * [[http://www.horde.org/horde/|Horde]] * [[http://www.xisc.com/|Prado]] - PHP5 component-based and event-driven framework. * [[http://www.symfony-project.com/content/about.html|Symfony]] - PHP5 with MIT licence. * [[http://homepage.mac.com/sbarnum/code/|Acorn]] - seems to be inactive - last post 2004. * [[http://www.qcodo.com/|QCodo]] includes a data-object layer. For PHP5. Some similarities to Rails in that you get auto forms. * [[http://www.phpopenbiz.org/document/|OpenBiz]] includes an ORM layer. Looks good. * [[http://www.radicore.org/|Radicore]] an MVC based system with some components that help you generate classes and provide runtime behaviour. And a few other frameworks we can learn from: * [[http://www.gosubway.org/|Subway]] - a Python framework in the spirit of Ruby on Rails * [[http://www.turbogears.org/|TurboGears]] - a competing Python framework * [[http://www.rubyonrails.org/|Ruby on Rails]] * [[http://www.cherrypy.org/wiki/CherryPyTutorial|Cherry Py]] * [[http://www.phpontrax.com/about|PHP Trax: Ruby on Rails brought to PHP]] * [[http://developer.novell.com/wiki/index.php/Rapptor_FAQ|Object-Rel mapping for Mono]] == Inactive projects == ---- ==== Object Database layers ==== One of the fundementals of a framework is the ability to work with a database. MVCLib uses an object to database mapping layer but there are several strategies in use, and the abilities of MVCLib could be enhanced. Here are useful links to other similar projects: * [[http://modeling.sourceforge.net/|Modeling]] - an object-relational bridge for Python . Uses entity-relationship diagrams to generate db structure and access code. * [[http://pear.php.net/package-info.php?pacid=80|PEAR DB_DataObject]] is a SQL Builder and Data Modeling Layer built on top of PEAR::DB. Its main purpose is to build SQL and execute statements based on the objects variables; group source code around the data that they relate to; provide a simple consistent API to access and manipulate that data. * [[http://propel.phpdb.org/trac/|Propel]] * [[http://creole.phpdb.org/wiki/wiki.php|Creole]] - a data abstraction layer for PHP5 * [[http://homepage.mac.com/sbarnum/code/alyoop/|PHP5 - seems to be stalled - last post in 2003]] * [[http://www.phpobjectgenerator.com/|POG - PHP Object Generator]] is aPHP code generator which automatically generates clean & tested Object Oriented code for your PHP4/PHP5 application; a Database Access Layer. * [[http://www.find.online.fr/phpersistence.org/|PHPersistence]] * [[http://www.myobjects.org/doku.php|MyObjects]] - PHP5 + MySQL * [[http://www.meta-language.net/metastorage.html|MetaStorage]] - PHP4. Draws UML too. * [[http://www.ezpdo.net/blog/cats/ezpdo|EZPDO]] BSD Licence. * [[http://pecl.php.net/package/DBDO|PEAR DBDO]] php5 - DBDO performs 2 tasks: 1. Builds SQL statements based on the objects vars and the builder methods; 2. acts as a datastore for a table row. (ORM) * [[http://wiki.ciaweb.net/yawiki/index.php?area=DB_Table]] * [[http://www.appelsiini.net/~tuupola/194/dbdatacontainer|DB_DataContainer]] is a PEAR compliant database persistence layer and data encapsulation class. * [[http://www.sitepoint.com/forums/showthread.php?t=214183|A prototype library for a layer]] - looks like it's well thought through. And some good discussion. There are also db code generators: * [[http://freshmeat.net/projects/phpcodegenie/]] - phpCodeGenie (PCG) is a code generator for database driven applications. PCG can talk to different databases and generate entire applications for you. * [[http://freshmeat.net/projects/janebuilder/]] - JaneBUILDER is a visual editor for PHP. It allows you to build complex PHP pages with mouse clicks and menu items. * [[http://opensource.aventus.nu/3.php?HIST=|PHPGen]] Some notes: http://www.sitepoint.com/forums/showthread.php?t=214183 From [http://wiki.cc/php/Object_Relational_Mapping|PHP Wiki]] And projects to learn from: * [[http://www.hibernate.org/|Hibernate]] is a widely used Java object/relational layer. * [[http://www.pythonweb.org/projects/webmodules/doc/0.5.3/html_multipage/lib/object.html|Database to object mapper for Python]] == Inactive projects == * [[http://sourceforge.net/projects/phdwait|phdwait]] - (PHP Database Web Application Toolkit) is a Web Application to manipulate and create Databases, Web Forms, Query lists and will have an option to export the code, so the user can continue its development isolated. * [http://sourceforge.net/projects/perdure/|Perdure]] ---- ==== Overviews ==== == Learning from Python: Django == The Python-based Django has an [[http://www.djangoproject.com/documentation/design_philosophies/|excellent discussion of their design principles]]. Django uses MVC (I think). It has templates and an inheritance system for templates. Templates can be extended like in ColdFusion, with new tags. Django stores the database description/schema in code, with one class per table - in Django this is the Model. The database can be created by the framework using the schema code. This also creates an API to the database, using the relationships you can define in the schema code. You are able to define ForeignKey (i.e. many-to-one relationships), ManyToManyField, OneToOneField and recursive/tree relationships. Django hides the details of SQL, but you are able to intercede with custom SQL. You are able to attach metadata to a model. The metadata holds information about how the model can be used - for instance which fields can be ordered, or permissions for the table. You are able to add info about filtering options on lists. You can add in your own methods to the model class and validator methods. After defining the Model, you generate code, which gives you classes for use with the Model. You automatically get a basic admin interface application into the database. Django assumes a static database; there's no way to upgrade a database, except by hand, and there's no provision for runtime database alteration. An Agile development style is difficult when there's no support for database change. -------------------- http://freshmeat.net/articles/view/843/ DB_Table - http://wiki.ciaweb.net/yawiki/index.php?area=DB_Table - DB_Table is an object-oriented interface to a database table. As a wrapper for the PEAR DB class, it provides methods to help you build automated create, insert, update, delete, and select functionality, and methods to automatically build input forms with HTML_QuickForm.