A xyster is a surgical instrument for scraping bones and other firm tissues. We really have no idea what this has to do with an application framework. “Xyster” was just a catchy name that people could remember. Hey, in our defense, there are a ton of software projects whose names are totally unrelated to their function.
Xyster is the brainchild of several developers of different backgrounds. It arose from the ashes of another framework, the never-released-but-constantly-developed PHP Wildfire. Eventually, we determined that the Zend Framework implemented many things we had already done in a similar way, and also provided a host of things we didn’t. Xyster is brought to you today as an extension to the impressive Zend Framework.
Our first priority was to fully implement the object relational mapping system and its object query language. As we keep moving, more useful features will be popping up, so stay tuned.
Now, about us:
- We strive for 100% code coverage in our unit tests
- We do Test Driven Development
- We are versed in cunning software design patterns
- We hate messy code and poor structure
- We like easy-to-use libraries with APIs that make sense
- We haven’t been using PHP 4 since 2003
Parts of Xyster
These are the different parts of the framework.
Xyster_Acl
The Zend Framework introduced a very handy security authorization scheme, the Zend_Acl. With it, you could define rules that grant or deny roles access to resources.
Building on the Zend_Acl package, we provide the ability to add "authorizers" to your ACL—objects that dynamically build rules. This becomes very useful when access to a resource is fine-grained or you have a complicated security hierarchy.
Xyster_Collection
PHP 5 brought great support for collection objects with the SPL. On the same token, we brought a complete collections package to PHP in the style of Java’s or .NET’s (but not nearly as stuffy ;]).
Behold, mortals, for in addition to the collections you’re used to, we bring you lists: an indexed collection like a numeric array, sets: collections that can only have a single copy of each value within, and maps: which can use objects as a key. As you would expect, you can add things to them, merge them together, remove things from them, and easily create strongly-typed collections. You can even make them read-only.
Xyster_Controller
The Zend Framework Controller is a great MVC. We've added several useful Action Helpers and Plugins that can be set up and used immediately. Among them: authorization, authentication, cache control, and file responses to name a few.
Xyster_Data
As far as we're concerned, you should be able to filter, sort, and refer to sets of tabular data using the same syntax regardless of origin. A database recordset should is like results from an LDAP directory is like parts of an XML file, etc.
The Xyster_Data package provides several objects to universally refer to fields in sets of data, and also to filter, aggregate, and order these sets.
Xyster_Enum
PHP lacks true enumerated type support. We did the best we could with providing this capability, because, frankly, it’s smart.
Xyster_Orm
Xyster does ORM (Object relational mapping). Several projects do the same, and quite well, but we like how we did it better. The Zend Framework itself has the Zend_Db_Table concept, and it’s very useful, but it’s also very limited. Further, we don’t like the Active Record pattern, and we also wanted to be able to support more than just databases as backends.
Our ORM system is based on the Data Mapper design pattern. This way, you can move data between your objects and their data store without either knowing about each other. Also the data store can be anything: a database, an LDAP server, an XML document, whatever. The ORM system can utilize Zend_Cache, so you can persist your objects in memecache or APC for lightning-fast performance. There’s also a powerful object query language that lets you filter and aggregate information from your objects, whether that information comes from a database or a method on the object itself! There are many more features outlined in the documentation.
In the Incubator
This components are in the incubator—they need use for a short period before they can be moved to the core library.
Xyster_Container
We're implementing a Dependency Injection container. Have a look for more information.
Xyster_Db_Gateway
The DB Gateway is an abstraction layer for schema definition. Create, drop, and alter tables, indexes, and the like no matter which database software you're using! The gateway supports key constraints, referential integrity, and sequences for the databases that support these features.