The idea behind it is not to reinvent the wheel but instead to combine existing and proven technologies in a convenient and effective way. It's a no-frills framework: no scaffolding, routing, AJAX, widgets or other buzzwords are included (hence the name) — just precise control over your sever-side code.
Not a single line of SQL or HTML is hardcoded, constructed “by hand” or mixed with the PHP code. Almost no URL hacking or chopping is needed. The UTF-8 encoding is used exclusively.
The framework exploits PHP 5's features such as more advanced object model, type hinting and class autoloading. HTTP request, response and session data is accessed via Java servlet-style OO wrappers. The framework has been straightfordly ported to Java.
It has been successfully used in several small to medium production solutions and is currently used to build a large community-based social website.
The framework's object-oriented design is based on the MVC pattern.Model Object-oriented, database-backed model, generated by Propel (on of the most useful PHP tools you can come across).
Model classes are totally up to the developer. However, they have to be defined in schema.xml (it handles inheritance as well) and generated and manipulated using Propel. They can be related to Resources, e.g. a Page would be typically related to a PageResource.
Model has to be regenerated every time the schema changes. View XSLT-based Views render representations of Resources such as XHTML or RSS. XSLT always produces well-formed XML and is the perfect template system in our eyes.
No support for other templating systems (such as Smarty) will be included, although you could easily do that yourself.
View renders the Model by serializing the necessary Model classes (e.g. Post or Comment) to XML documents and passing them to an XSLT stylesheet. It also sets the content type and takes into account request query parameters if necessary.
Views have to be subclasses of the View class and implement the display() method. For views using XSLT as the template system, there is a special XSLTView that can be subclassed. Controller REST and RDF inspired frontal Controller, based on Resources with URIs that implement HTTP methods. Resources are backed by the database and can be easily searched, moved, or given permissions. That also means that the framework cannot by default run without a database.
Resources execute the business logic, such as loging in a user or creating a blog post (most likely using data from some kind of Form or plain query parameters), and return an appropriate View. They can be related to Model classes. That helps to create modular code that can be easily moved.
Each Resource class has an URI and methods as in HTTP: doGet(), doPost() etc. Controller selects the Resource by matching its URI against HTTP request URI (stripped off of the query parameters), and its method to be executed is the same as the HTTP request method. There is usually no need to modify the Controller class itself.
Resources can have meaningful and user-friendly URIs such as http://host/Futurama/Characters/Dr Zoidberg/ with no extra work instead of awkward query parameters as in http://host/Futurama/Characters.php?id=236542.
These parameters and resources are totally independent of physical files.
Resources have to be subclasses of the Resource class. The Resource class can be used to implement logic common for all resources, e. g. checking if the user is logged in.
There are several helper classes included in the Controller: Forms help to abstract the query parameters of a HTTP request in a more meaningful way, and Commands can be used for complex business logic that does not fit nicely in a Resource.