My favorites | Sign in
Project Home Downloads Wiki Issues Source
Search
for
SummaryPT  
Updated Nov 29, 2007 by alg4net

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:

URLSaídaDescrição
1www.example.com/index.php Hi! I'm the index Sem caminho na URL, chama a index
2www.example.com/index.php/doSomething I did something cool Chama o método correspondente ao primeiro segmento do caminho da URL
3www.example.com/index.php/doSomething/Nice I did something nice Árvore inteligente: Chama um método à partir de dois segmentos do caminho
4www.example.com/index.php/say/dog/hot Application said: hot dog Chama o método com parâmetros baseados no caminho da URL
5www.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!
Comment by eduardo%...@gtempaccount.com, Aug 12, 2009

Alexandre, veja o que eu fiz:

Para não usar o PATH_INFO:

.htaccess:

RewriteEngine on 
RewriteRule .* index.php 
php_flag magic_quotes_gpc off 
php_flag register_globals off

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

Comment by eduardo%...@gtempaccount.com, Aug 12, 2009

ps: ficaram alguns pontos de interrogação no meio do código... nada que possa atrapalhar o entendimento...


Sign in to add a comment
Powered by Google Project Hosting