The Xyster Framework leverages and extends several parts of the Zend Framework providing a collection of useful tools for PHP applications. We don't want to bore you with marketing — evaluate it for yourself!
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.
Developers are the last ones to write their own documentation and the first to complain when another hasn't done it. Fortunately for you, we have a smattering of some docs available for your reading pleasure. Note that the documentation has not been updated for version 02 Build 01.
The user's guide reads like a book. It has descriptive narratives and examples of using the individual parts of the Xyster Framework.
The API is automatically generated by phpDocumentor. It's a low-level specification detailing every last class and method. Very boring, we know, but extremely useful if you don't want to hunt around in the actual source code. You can also take a look at the incubator API.
Xyster was 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 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
Current Parts of Xyster
These are the current different parts of the framework in version 02 Build 01.
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.
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.
We've implemented a Dependency Injection container. Have a look for more information.
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.
A full-blown DAO system. Built-in support for Doctrine 2, and more ORM frameworks support is on the way.
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.
PHP lacks true enumerated type support. We did the best we could with providing this capability, because, frankly, it's smart.
Useful utilities for working with classes, from value binding to runtime class proxying (to help with AOP support).