SimpliPHy is a model-view-controller framework for PHP based on the design of Jakarta Struts. While there are existing MVC frameworks for PHP, including two PHP ports of Jakarta Struts, I believe that SimpliPHy is unique in its approach. Instead of attempting to be a direct port of Struts, SimpliPHy implements the basic design of Struts while taking advantage of PHP's unique strengths.
The design goals for SimpliPHy are to create a very simple, lightweight design that is also robust and flexible. The result is a framework that is easy to learn and use to quickly build a more maintainable Web application.
Struts has been so successful because it simplifies the mundane tasks of Web development in Java, but unlike other frameworks, the developer does not need to spend a large amount of time learning the framework's approach--Struts merely implements well known design patterns in a very straightforward design and little more. Struts helps you develop applications more quickly and easily without forcing you to code in a particular way, or limiting your flexibility. Simpliphy takes the same approach, with lessons learned from the design of Struts, but uniquely building on the strengths of PHP.
Essentially, SimpliPHy is a way of using the PHP idiom of the 'self-processing page' in a highly configurable way to enforce the MVC pattern. The result is code that is more performant (code that is not needed is not parsed and executed) and more maintainable.
The goal for version one of Simpliphy is to implement as much as possible the features of version two of Struts. These include:
- the application's structure is configured from one location (action mappings)
- a central delegating program
- action forms that validate user submitted information and present that information in an object
- action classes that implement requests
- action errors and action forwards are implemented
- role based authorization of actions in the action mappings
- sub-actions and sub-applications are supported
SimpliPHy also provides support for message catalogs that are localizable. The ability to populate a class from another class as provided in the Java BeanUtils class is integrated into the framework. Powerful, lightweight classes also exist for logging and object oriented database interaction.
The framework is extensible and neutral toward these helper classes, as Struts is. While these helper classes are provided, these classes are all pluggable in the framework, and alternative implementations of loggers and database abstraction layers for example can be used just as easily with a simple change to the central configuration file. And of course, SimpliPHy allows the developer to modify the action controller processing pipeline through hooks like the "preProcess" function in Struts.