li₃
You asked for a better framework. Here it is.
li₃ is the fast, flexible and the most RAD development framework for PHP.
A framework of firsts
li₃ is the first and only major PHP framework built from the ground up for PHP 5.3+, and the first to break ground into major new technologies, including bridging the gap between relational and non-relational databases through a single, unified API.
Promiscuously opinionated
Some frameworks give you a solid set of classes, but little or no default project organization, leaving you to fend for yourself on each project you create, and spend time wiring up framework classes that should just work together. Others provide you with great organizational conventions, but no way to break out of those conventions if you need to, and too often, no way to override or replace core framework classes.
li₃ is the first framework to give you the best of both worlds, without compromising either. In fact, li₃'s API is intentionally designed to allow you to "grow out of" the framework and into your own custom code over the course of your application's lifecycle, if your needs require.
Technology
li₃ takes full advantage of the latest PHP features, including namespaces, late static binding and closures. li₃'s innovative method filter system makes extensive use of closures and anonymous functions to allow application developers to "wrap" framework method calls, intercepting parameters before, and return values after.
li₃ also complies with PSR-4, the PHP namespacing standard, allowing you to easily integrate other PHP standard libraries and frameworks with li₃ applications, and vice-versa.
li₃ integrates the latest storage technologies, including MongoDB, CouchDB and Redis, with plugin support for Cassandra, ElasticSearch and others.
Flexibility
li₃ gives you full control over your application, from filters to dynamically modify framework internals, to dynamic dependencies to extend and replace core classes with application or plugin classes, to heavy use of adapter-oriented configurations, to make it seamless to move between different technologies and options.
Every component of the li₃ framework stack is replaceable through the robust plugin architecture. Swap out the default ORM / ODM implementation for Doctrine 2 or PHP ActiveRecord. Don't like the templating? Use Twig, Mustache, or roll your own.
If you don't even need to write a full application, build a micro-app in a single file using the routing system, without giving up the maintainability of the framework's structure.
Classes
- lithium\action\Controller
- lithium\action\DispatchException
- lithium\action\Dispatcher
- lithium\action\Request
- lithium\action\Response
- lithium\analysis\Debugger
- lithium\analysis\Docblock
- lithium\analysis\Inspector
- lithium\analysis\Logger
- lithium\analysis\Parser
- lithium\analysis\logger\adapter\Cache
- lithium\analysis\logger\adapter\File
- lithium\analysis\logger\adapter\FirePhp
- lithium\analysis\logger\adapter\Growl
- lithium\analysis\logger\adapter\Syslog
- lithium\console\Command
- lithium\console\Dispatcher
- lithium\console\Request
- lithium\console\Response
- lithium\console\Router
- lithium\console\command\Create
- lithium\console\command\G11n
- lithium\console\command\Help
- lithium\console\command\Route
- lithium\console\command\Test
- lithium\console\command\create\Controller
- lithium\console\command\create\Mock
- lithium\console\command\create\Model
- lithium\console\command\create\Test
- lithium\console\command\create\View
- lithium\console\command\g11n\Extract
- lithium\core\Adaptable
- lithium\core\ClassNotFoundException
- lithium\core\ConfigException
- lithium\core\Configuration
- lithium\core\Environment
- lithium\core\ErrorHandler
- lithium\core\Libraries
- lithium\core\NetworkException
- lithium\core\Object
- lithium\core\StaticObject
- lithium\data\Collection
- lithium\data\Connections
- lithium\data\DocumentSchema
- lithium\data\Entity
- lithium\data\Model
- lithium\data\Schema
- lithium\data\Source
- lithium\data\collection\DocumentSet
- lithium\data\collection\MultiKeyRecordSet
- lithium\data\collection\RecordSet
- lithium\data\entity\Document
- lithium\data\entity\Record
- lithium\data\model\Query
- lithium\data\model\QueryException
- lithium\data\model\Relationship
- lithium\data\source\Database
- lithium\data\source\Http
- lithium\data\source\Mock
- lithium\data\source\MongoDb
- lithium\data\source\Result
- lithium\data\source\database\adapter\MySql
- lithium\data\source\database\adapter\PostgreSql
- lithium\data\source\database\adapter\Sqlite3
- lithium\data\source\database\adapter\pdo\Result
- lithium\data\source\http\adapter\CouchDb
- lithium\data\source\mongo_db\Exporter
- lithium\data\source\mongo_db\Result
- lithium\data\source\mongo_db\Schema
- lithium\g11n\Catalog
- lithium\g11n\Locale
- lithium\g11n\Message
- lithium\g11n\Multibyte
- lithium\g11n\catalog\Adapter
- lithium\g11n\catalog\adapter\Code
- lithium\g11n\catalog\adapter\Gettext
- lithium\g11n\catalog\adapter\Memory
- lithium\g11n\catalog\adapter\Php
- lithium\g11n\multibyte\adapter\Iconv
- lithium\g11n\multibyte\adapter\Intl
- lithium\g11n\multibyte\adapter\Mbstring
- lithium\net\Message
- lithium\net\Socket
- lithium\net\http\Auth
- lithium\net\http\ClientMediaException
- lithium\net\http\Media
- lithium\net\http\MediaException
- lithium\net\http\Message
- lithium\net\http\Request
- lithium\net\http\Response
- lithium\net\http\Route
- lithium\net\http\Router
- lithium\net\http\RoutingException
- lithium\net\http\Service
- lithium\net\socket\Context
- lithium\net\socket\Curl
- lithium\net\socket\Stream
- lithium\security\Auth
- lithium\security\Password
- lithium\security\auth\adapter\Form
- lithium\security\auth\adapter\Http
- lithium\security\validation\FormSignature
- lithium\security\validation\RequestToken
- lithium\storage\Cache
- lithium\storage\Session
- lithium\storage\cache\Adapter
- lithium\storage\cache\adapter\Apc
- lithium\storage\cache\adapter\File
- lithium\storage\cache\adapter\Memcache
- lithium\storage\cache\adapter\Memory
- lithium\storage\cache\adapter\Redis
- lithium\storage\cache\adapter\XCache
- lithium\storage\cache\strategy\Base64
- lithium\storage\cache\strategy\Json
- lithium\storage\cache\strategy\Serializer
- lithium\storage\session\adapter\Cookie
- lithium\storage\session\adapter\Memory
- lithium\storage\session\adapter\Php
- lithium\storage\session\strategy\Encrypt
- lithium\storage\session\strategy\Hmac
- lithium\storage\session\strategy\MissingSignatureException
- lithium\template\Helper
- lithium\template\TemplateException
- lithium\template\View
- lithium\template\helper\Form
- lithium\template\helper\Html
- lithium\template\helper\Security
- lithium\template\view\Compiler
- lithium\template\view\Renderer
- lithium\template\view\adapter\File
- lithium\template\view\adapter\Simple
- lithium\test\Controller
- lithium\test\Dispatcher
- lithium\test\Filter
- lithium\test\Group
- lithium\test\Integration
- lithium\test\Mocker
- lithium\test\MockerChain
- lithium\test\Report
- lithium\test\Unit
- lithium\test\filter\Affected
- lithium\test\filter\Complexity
- lithium\test\filter\Coverage
- lithium\test\filter\Profiler
- lithium\util\Collection
- lithium\util\Inflector
- lithium\util\Set
- lithium\util\String
- lithium\util\Validator
- lithium\util\collection\Filters