Indigo

I have been working on a PHP project that will either be my rebirth or my coda in that language, but I don't know which one yet. It is is an MVC framework called Indigo that is the byproduct of several custom built frameworks, with inspiration from Drupal and Kohana. The project came about as I worked on SableOPS and refactored the codebase into a more maintainable system. There were things that I liked, decisions that I regretted, and features I wanted to implement. Indigo is the result of those thoughts.

My desire to create this MVC framework is driven by an urge to flex the full range of my skillset and make use of every good practice, pattern and architectural design decision that I can. Since I am starting with a blank slate, I am not bound to any prior work. The project is influenced by the tools I've used over the years. From Drupal, I take the hooks, permissions, site folder setup, and routing. From Kohana, I take the minimalism, helpers, models, views and controllers. From my own experiences, I take extremely loose coupling, Composer, magic columns and namespacing.

The end result will be a highly modular, easily maintained framework. I plan to force as little as possible on the end developer. To this end, I am using every tool, resource and pattern that I know to keep the system as loosely coupled as posisble. I would like the developer to be able to use their own templates, databases, or models as they see fit. The adapter pattern, along with rigid interface enforcement, has been a great help in this goal.

I provide a default template engine, but the implementation allows any engine to be swapped in at run time, so long as the template implements the right interface. An adapter will be needed for most templates, but I plan to write the adapter for Twig myself, since I am already interested in exploring Twig. Databases will be set up similarly to views, but a little more tightly controlled since certain parts of the core require a database.

The project is being maintained at github, and I will continue to post my thoughts and progress as I continue. Right now, it is in extremely early alpha stages and is not usable. All current code is in flux and might be drastically changed if I decide to go in a different direction. I don't know what I plan to do with Indigo upon completion. If it turns out to be a reliable, solid framework, I will release it into the wild and try to use it as a general purpose tool. But my only goal is to really showcase everything I am capable of doing in PHP at this point.

Tags: