Introdução
O Principal objetivo é oferecer um núcleo ultra-simples de componentes para aplicações web e integrar outros frameworks (Zend Framework, etc.) facilmente em um único ambiente.
Destaques
- Sintaxe simples e intuitiva
- Pequeno - menos de 20kb atualmente, menos de 100kb planejado
- Respeita os padrões - Base Cube segue os mesmos padrões de nomeação e código do PEAR e do Zend Framework.
- Poderoso - Uso extensivo de recursos avançados do PHP5 (Reflexão, autoloading, SPL, métodos mágicos, sobrecarga...)
- Totalmente extensível - Maneiras simples de extender as classes do Base Cube
- Integrado - Integra-se com o Zend Framework
Classes
Atualmente, as principais classes são:
- Base_App: Oferece um controlador simples e multi-propósito para criação de aplicações MVC, PAC e widgets.
- Base_Base: Toda classe do Base Cube deriva desta.
- Base_Chain: Um objeto que sempre retorna a si mesmo e contém métodos para trabalhar com correntes de objetos (Ex. $object->another->another->another('something'))
- Base_Cube: Carrega as classes, registra novas funções de autocarregamento e executa interações com o ambiente.
- Base_Exception: Trata exceções.
- Base_Path: Interpreta caminhos e realiza tarefas relacionadas.
- Base_View: Templates e renderização de saída.
- Base_Zend: Integração com Zend Framework.
Sintaxe
Carregamento
Cada classe é desenvolvida para ser simples e intuitiva. Para carregar o Base Cube você precisa de somente uma linha de código:
Exemplo 1
<?php
require_once 'Base/Cube.php';
?>
Você pode carregar, extender e instanciar classes Base apenas chamando-as. No código a seguir, uma aplicação simples que exibe a informação na tela é feita em apenas duas linhas de código:
Exemplo 2
<?php
require_once 'Base/Cube.php';
$show = new Show_App;
?>
Se você chamar uma página com o código acima (Ex: www.example.com/index.php), você deverá ver algo como Array ( [0] => index ). Adicionando um caminho à URL (Ex. www.example.com/index.php/test/me) você deve ver algo como: Array ( [0] => test [1] => me )
Extenção Inteligente
No último exemplo Base Cube automaticamente carregou as classes necessárias e automaticamente criou a classe Show_App extendida à partir da Base_App.
Se um arquivo Show/App.php (Diretório Show, arquivo App.php) existe, então ele tenta carregar a nova classe de lá e não autoextendendo-a. Um exemplo de arquivo Show/App.php é o seguinte:
Exemplo 3
<?php
class Show_App extends Base_App
{
function index()
{
echo 'Hi! I\'m the index';
}
function doSomething()
{
echo 'I did something cool';
}
function doSomethingNice()
{
echo 'I did something nice';
}
function say($what, $how)
{
echo "Application said: $how $what";
}
}
?>Chamadas do Controlador
Quando Base Cube carrega o arquivo do Exemplo 3, a aplicação se comporta de uma maneira legal:
| URL | Saída | Descrição |
| 1 | www.example.com/index.php | Hi! I'm the index | Sem caminho na URL, chama a index |
| 2 | www.example.com/index.php/doSomething | I did something cool | Chama o método correspondente ao primeiro segmento do caminho da URL |
| 3 | www.example.com/index.php/doSomething/Nice | I did something nice | Árvore inteligente: Chama um método à partir de dois segmentos do caminho |
| 4 | www.example.com/index.php/say/dog/hot | Application said: hot dog | Chama o método com parâmetros baseados no caminho da URL |
| 5 | www.example.com/index.php/jump/twice | Hi! I'm the index | Método não encontrado, chama o index |
Usando caminhos customizados
Se você não quer usar o PATH_INFO (aquele caminho após o nome do arquivo), você pode passar qualquer caminho para a aplicação. Alguns exemplos:
Exemplo 4
<?php
require_once 'Base/Cube.php';
$show = new Show_App('/some/path');
?>Acima, um exemplo usando caminho separado por barras.
Exemplo 5
<?php
require_once 'Base/Cube.php';
$show = new Show_App(array('some','path'));
?>Uma array.
Exemplo 6
<?php
require_once 'Base/Cube.php';
$show = new Show_App($_GET);
?>
A array GET, Base Cube usa os seus elementos em ordem de declaração.
Integração com Zend Framework
Você pode chamar as classes do Zend Framework usando qualquer objeto Base Cube. A sintaxe é $someobject->Zend->ClassName onde ClassName é o nome da classe do Zend Framework exceto pela parte Zend_. Veja o exemplo abaixo:
Exemplo 7
<?php
require_once 'Base/Cube.php';
$show = new Show_App();
if($show->Zend->Validate_EmailAddress()->isValid('billg@microsoft.com')) echo "\nValid Email!";
?>Saída do exemplo 7
Array ( [0] => index )
Valid Email!
Alexandre, veja o que eu fiz:
Para não usar o PATH_INFO:
.htaccess:
sobreescrevendo o construct() da Base_App? na Show_App?:
public function construct() { $this->call(new Show_Path?($SERVER 'REQUEST_URI'?)); }ps: Show_Path? não tem nada, é apenas uma extensão da Base_Path?, que não pode ser instanciada por ser abstrata... deve ser usado assim pois call da Base_App? e consequentemente da Show_App? aceita apenas instancias de Base_Path? (e consequentemente de Show_Path?) como argumento...
<?php class Show_Path extends Base_Path {} ?>Outra mudança necessaria foi na classe Base_App?:
final public function call(Base_Path $pathArgs = NULL) { $methodName = $pathArgs[0]; //ORIGINAL $methodName = $this->Path[0]; ...Provavelmente essas mudanças não fossem absolutamente necessarias, mas meu pouco conhecimento em técnicas avançadas de PHP me impediram de achar outras soluções sem modificar o framework...
Faça alguns tutoriais para que todos nós (os leigos) também possam usar esse framework...
's
ps: ficaram alguns pontos de interrogação no meio do código... nada que possa atrapalhar o entendimento...