O nome do meu framework é Open Ideo. Depois, com mais tempo, eu explico a origem do nome, o propósito e todo o conceito por trás do desenvolvimento.
Nesse release, está presente apenas o núcleo controlador de toda aplicação, que pode servir de base pra trabalhar com qualquer classe em PHP. Baixe aqui o framework com os exemplos do post (execute os arquivos index.php 1, 2 e 3).
O Básico
Atualmente o framework possui um único arquivo, openIdeo.php. Basta colocá-lo no seu diretório web e incluir onde deseja utilizar, assim:
PHP
<?php
require 'openIdeo.php';
?>
Para criar uma classe controladora, declare-a como extendendo oiApp, com o sulfixo App sempre assim:
PHP
<?php
require 'openIdeo.php';
class blogApp extends oiApp
{
function index()
{
echo 'Hello World';
}
}
new blogApp;
?>
Note que no final eu adicionei um new blogApp, é ele que inicia o objeto.
Se você salvar isso como index.php e abrir no navegador, verá a mensagem Hello World, simples e prático. Adicionar uma nova ação é simpes:
PHP
<?php
require 'openIdeo.php';
class blogApp extends oiApp
{
function index()
{
echo 'Hello World';
}
function post($id)
{
echo 'Esse é o post '.$id;
}
}
new blogApp;
?>
Agora, chamando www.exemplo.com/index.php/post/alguma-coisa ele exibirá na tela Esse é o post alguma-coisa. Bastante prático não? Você pode adicionar quantos parâmetros você quiser no método, eles serão passados todos via URL:
PHP
<?php
require 'openIdeo.php';
class blogApp extends oiApp
{
function index()
{
echo 'Hello World';
}
function post($id)
{
echo 'Esse é o post '.$id;
}
function arquivo($ano=NULL,$mes=NULL,$dia=NULL)
{
echo "Arquivos do ano $ano, mês $mes e dia $dia";
}
}
new blogApp;
?>
Se você chamar www.exemplo.com/index.php/2007/07/01 ele mostrará a frase Arquivos do ano 2007, mês 07 e dia 01.
Métodos-Índice (AKA redirecionamento de métodos)
Uma das coisas mais legais do framework, é a possibilidade de criar métodos-índice:
PHP
<?php
require 'openIdeo.php';
class blogApp extends oiApp
{
function index()
{
echo 'Hello World';
}
function post($id)
{
static $index;
echo 'Esse é o post '.$id;
}
function postAdicionar()
{
echo 'Que tal adicionar um post?';
}
function arquivo($ano=NULL,$mes=NULL,$dia=NULL)
{
echo "Arquivos do ano $ano, mês $mes e dia $dia";
}
}
new blogApp;
?>
Agora se você chamar www.exemplo.com/index.php/postAdicionar ele exibirá Que tal adicionar um post?, mas o mais legal é que como declaramos static $index no método post, podemos chamar assim: www.exemplo.com/index.php/post/adicionar, bem mais humano.
Você pode optar por deixar a classe blogApp no arquivo index.php mesmo, ou pode salvá-la no arquivo blogApp.php, ela será carregada automaticamente quando você chamar o novo objeto através do new blogApp; no index.
O Morfador
Adicionalmente, você pode criar várias classes (por exemplo blogApp, enqueteApp e quizApp), e ao invés de chamar por cada uma delas com new, você faz um morfador, assim: oiApp::morph(). O morfador escolhe a classe que será carregada com base na URL, portanto www.exemplo.com/index.php/blog chama blogApp, www.exemplo.com/index.php/enquete chama enqueteApp e assim por diante.
Você pode inclusive limitar seu morfador, chamando oiApp::morph(‘blog|enquete’) ele apenas morfa entre as classes blogApp e enqueteApp, quizApp nunca será carregada por esse morfador. Caso você limite o morfador e ele não encontre o fragmento de inicialização na URL, ele pegará o primeiro da lista de limitações, nesse caso o blog.
Podem ser chamadas quantas classes ou quantos morfadores você quiser. Você pode chamar classes ou morfadores que retornam valores, que exibem coisas, que incluem arquivos. Adicionalmente, escrever módulos para o Open Ideo permite que você controle como eles serão auto-carregados e executados. Essas demais funções do núcleo eu explicarei assim que lançar os próximos componentes do sistema.
Sei que é simples, é apenas um controlador afinal, mas o controlador mais versátil e leve (menos de 4kb) que já vi
Estou ansioso pra ouvir opiniões e bugs (infelizmente eles existem sempre)!