public
Description: Minimalistic PHP webapp framework
Homepage:
Clone URL: git://github.com/andyhd/minim.git
minim /
name age message
file MIT_LICENSE Tue Nov 25 06:32:36 -0800 2008 Added MIT license text [andyhd]
file README.textile Tue Nov 25 06:32:36 -0800 2008 Added MIT license text [andyhd]
directory lib/ Wed Apr 01 23:39:53 -0700 2009 Compact array dump [andyhd]
file minim.php Sun May 31 23:29:47 -0700 2009 Allow specifying fallback templates to render f... [andyhd]
directory plugins/ Tue Jun 09 23:27:44 -0700 2009 Added config plugin [andyhd]
directory tests/ Sat Mar 28 16:26:09 -0700 2009 Update tests to use refactored path() [Andy Driver]
directory tools/ Sun Mar 29 15:49:43 -0700 2009 Make test runner exit with status 1 on failures [Andy Driver]
README.textile

Minim

Minim is a minimalist PHP web application framework. The idea here is to have
a bare minimum of features for your web application. To that end, nearly every
part of minim is a plugin. You only need to enable the plugins you use. It’s
really just require/include but with some lightweight wrapper code. There will
be lots of plugins eventually, but each one builds on the same premise of the
simplest thing that works.

Minim is made available free of charge under the MIT license. For specific
terms, please read the MIT_LICENSE file.

Not another PHP framework?

Yeah, sorry. It’s a bit of a paradox; I don’t like frameworks and yet here I
am, adding another one to the pile. So why am I doing this? Having been a PHP
web developer for a long time and having used quite a few different frameworks,
I’ve built up a list of problems that none of them seem to tackle totally.
In no particular order:

  • Don’t force me to work a certain way. MVC is ok, but do I really have to put
    all my files in the folders you specify? I have to subclass this and
    implement that and all I want to do is output some text from the DB.
  • Keep things as simple as possible, but no simpler. I know PHP is object
    oriented now, but that doesn’t mean you have to build a massive hierarchy of
    classes and interfaces just to implement a blog. Seriously, leave that crap
    to the Java developers.
  • PHP parses text source files. Don’t have another parser just for
    configuration. YAML is not more readable than PHP arrays. Just who are you
    expecting to write your configuration files anyway? If they can’t understand
    PHP, can you trust them with configuration at all?
  • PHP is already a template language. You already have conditional blocks,
    loops and function calls for more complex stuff. Implementing a parser in a
    template language is just stupid. Restricted template languages just
    frustrate template writers when they run into that edge case you didn’t
    consider.

How do I use it?

I’ve tried to avoid imposing any constraints on how to use Minim. You should
be able to simply add Minim to your include_path and include/require it as
needed. Each plugin should be able to be used independently of Minim, so you
only have to include what you need.

Minim looks for models, view/controllers and templates in the directories you
specify in configuration, so there’s no enforced directory structure.

Models are defined in a clear, declarative, fluent syntax. Templates are just
PHP and HTML, no restrictions. In fact, you don’t have to use separate
templates or models, if you don’t want to.

What plugins are there?

  • Object Relational Mapper. I also dislike most ORM implementations in PHP,
    as they take away the flexibility of raw SQL. This one is based loosely on
    the Django ORM and provides lazy loading (and soon, caching) to improve
    performance.
  • URL routing. If you want to have pretty URLs in a structure that doesn’t
    match your filesystem, I recommend learning mod_rewrite. However, if you
    want to refer to your URLs by short names in the code (for your non-PHP-savvy
    template editor’s convenience) this plugin can help.
  • Template engine. I know, I know, but it’s not what you think. This plugin
    provides template hierarchy. You can define a page specific template which
    inherits from a template, which can inherit from another template, and so on.
    It also provides some basic data encapsulation, so that your template editor
    only has access to data relevant to the current template.
  • Admin. This one builds on the ORM to create a web interface to your
    database. It allows you to create, edit and delete your model data.
  • Forms. Provides a simple way to define constraints for your form fields,
    and validation of same. Forms can also be defined by ORM models to save
    repeating yourself.
  • Pagination. Provides a simple way to paginate data. Works with arrays, ORM
    result sets and anything that implements the Iterator interface from SPL

More plugins are in development, including cookie management, email and
i18n/l10n.