- Um framwork opensource para auxiliar desenvolvedores PHP a iniciar e manter seus projetos Web.
- Promove a separação de camadas MODELO, VISAO e CONTROLADOR.
- Realiza mapeamento de URLs para chamadas a métodos das classes (módulos) da camada controladora
- Projetos pequenos podem conter apenas métodos na classe \controlador\Home
- Projetos médios podem conter mais classes que herdem de \controlador\Modulo
- Projetos maiores podem dividir o controlador em diretórios para melhor organização de seus módulos
- Embasado no framework HTML5 Boilerplate, realiza todas as suas boas práticas e utiliza a biblioteca MinifyJs para reduzir JS e CSS on the fly sem você se preocupar.
- Suporta internacionalização de modo simples e eficaz.
- Suporta múltiplos ambientes a partir de arquivos de configuração e já traz os ambientes desenvolvimento, produção e testes como sugestão
- Suporta definição de ambiente de execução na própria URL
- Suporta adição de novos módulos através de plugins em LIB
- PHP 5.3.0+
- Apache + mod_rewrite
- Sobreposições de configurações via .htaccess
Este projeto foi inicialmente concebido em 2008, por Jose Berardo, diretor da Especializa Treinamentos (http://www.especializa.com.br), para servir de sugestão de organização de diretórios para os primeiros projetos de seus alunos.
A partir daí, algum código foi escrito para ajudar a ensinar técnicas como:
- Reescrita de URLs
- Instrospecção (reflection)
- Ajustes de configurações do php.ini
- Expressões regulares
- Internacionalização
E uma série de outras que foram surgindo.
Ao longo de anos, alguns ex-alunos e amigos passaram a adotar este framework nas empresas em que desenvolviam e constantemente relatavam incrementos e melhorias no código.
Todo o código do FacilMVC foi completamente cedido à comunidade PHP Pernambuco
- http://groups.google.com/group/phppernambuco
- https://github.com/phppe/
- https://www.facebook.com/groups/458218590859250/
Seu número de colaboradores não pára de crescer e seu desenvolvimento está todo organizado no GitHub.
Este projeto está em franco desenvolvimento, portanto:
Execute o comando: $ git clone https://github.com/phppe/FacilMVC.git Ou utilize a ferramenta que achar mais adequada para clonar a última versão do GitHub
Vá ao arquivo Home.php no diretório controlador e confira seus métodos index() e phpinfo().
O primeiro já realiza uma ação Facil::despachar() onde é passado o nome (sem a não obrigatória extensão) do arquivo de template que será utilizado para devolver alguma resposta ao cliente.
O segundo, phpinfo(), apenas exibe a função phpinfo() para informar as configurações do servidor. Ele deve ser excluido, mas serve apenas para mostrar que você pode chamá-lo no browser ao digitar uma url como: http://meuservidor/phpinfo ou http://meuservidor/home/phpinfo
Note que o nome do módulo "Home" não é necessário, assim como se você não digitar nenhum caminho, o método index será executado.
Você pode conferir e alterar os valores padrão no arquivo padrao.ini do diretório controlador.
Na URL é possível informar:
/ambiente/namespace/modulo/acao/parametros
Onde:
- Ambiente: Conjunto de configurações obtidas de arquivos *.ini em config
- Namespace: Parte do namespace da classe (a partir de controlador)
- Modulo: Nome da classe que herda de controlador\Modulo
- Acao: Método a ser invocado após criar a instância da classe Modulo
- Parametros: Lista (separada por barras) de parâmetros para o método
Esse formato encurta mais a URL e a torna mais amigável. Confira o exemplo:
A URL abaixo: www.meusite.com/?secao=carrinho&acao=adicionar&idproduto=1
Poderia ser assim no Fácil: www.meusite.com/carrinho/adicionar/1
Se o exemplo de como poderia ser a classe:
namespace controlador;
class Carrinho { public function adicionar($idProduto) { // O valor de $idProduto neste exemplo é 1 } }
Antes de qualquer chamada a Facil::despachar(), é possível invocar Facil::setar('variavel', 'valor'). Esta operação vai registrar uma variável que pode ser facilmente recuperada nos arquivos da visão (presentes no diretório visao/default) apenas usando
O diretório padrão para os arquivos da visão é o default, abaixo de visao. No entanto, isso pode ser modificado no arquivo padrao.ini de config. É possível mudar também a extensão padrão desses arquivos bem como desrespeitar esse padrão se a extensão for fornecida no método despachar. Por exemplo: Facil::despachar('tela.php');
Projetos podem conter múltiplas templates. Por exemplo, sistemas que possam carregar temas diferentes escolhidos pelos próprios usuários, podem se valer da instrução Facil::setTemplate('nova_template'), onde 'nova_template' seria um diretório abaixo de visao. Realize este comando antes de Facil::despachar().
Para adicionar mensagens sensíveis a traduções para mais de um idioma escreva diretamente nos arquivos da visão, algo como:
<p>{$principal.teste}</p>
Ao despachar, o controlador vai no diretório config/i18n buscar pelo arquivo principal_pt_br.ini, onde pt_br é obtido a partir do cabeçalho Http Accept-Language. Ele então substitui o texto original pelo valor da variável teste. É possível agrupar variáveis nesses arquivos com algo como:
[tela_inicial]
bemvindo = Seja Bem-Vindo ao Fácil MVC
Para obter esta mensagem, basta inserir em algum arquivo da visão, o texto:
{$principal.tela_inicial.bemvindo}
É possível definir um idioma a partir de qualquer fonte, em vez de sempre se valer do Accept-Language. Para tanto, antes de chamar Facil::despachar(), execute Facil::setIdioma('en') onde 'en' seja o sufixo de locale dos arquivos em config/i18n.
Imagens devem ser salvas em visao/default/img e assim por diante para Javascript (js) e CSS (css). Há um diretório recursos para outros tipos de arquivos.
Para linkar esses arquivos nos arquivos da visão, preocupe-se apenas com seu caminho relativo ao diretório onde está o seu arquivo .html, o controlador vai entender que ele foi incluido na raiz (index.php) e substituir seu caminho relativo pelo caminho real até este diretório.
Arquivos JS e CSS podem ser reduzidos (processo conhecido por minify) automaticamente no momento em que forem requisitados pelos clientes. Para que isto ocorra, retire o comentário da linha 129 do arquivo .htacess da raiz do projeto. Esta linha encaminha ao PHP todas as requisições aos recursos estáticos, permitindo que ela possa reduzir o conteúdo de JS e CSS em três níveis (configuráveis nos arquivos de ambiente do diretório config).
Uma prática recomendada por empresas como Google e Yahoo, é a de unificar arquivos js e css, evitando excesso de requisições HTTP e consequentemente melhorando o desempenho final.
O Facil MVC traz duas maneiras de facilmente unir arquivos, se você criar um arquivo como:
js/scripts.combo.js
Onde js é o caminho relativo do combo, scripts é um nome que você escolhe e .combo.js é uma extensão válida (a outra é .combo.css). Este arquivo deverá carregar os nomes de outros arquivos que serão todos incluídos na resposta.
A segunda maneira de combinar arquivos em um só é simplesmente chamar uma URL como:
js/libs/libs.js
Onde js é o caminho para o arquivo. libs é um subdiretório que contenha os arquivos a serem combinados e libs.js não seja um arquivo existente, mas uma repetição do nome do diretório (no caso libs) com a extensão .js ou .css.
Fazendo isso, o Facil MVC irá combinar todos os arquivos presentes no diretório libs, sem você precisar sequer criar um arquivo de combinação.
Nestes dois processos, o resultado poderá ser reduzido de acordo com o exposto no tópico anterior.
Crie suas classes livremente no diretório modelo. Você não precisará escrever nenhum include em seus códigos. Basta que suas classes declarem uma instrução namespace condizente com o diretório onde estão. Por exemplo:
namespace modelo; -> Para classes salvas diretamente no modelo namespace modelo\dados; -> Para classes salvas no subdiretório dados do modelo
E assim por diante para toda e qualquer classe que você venha a criar. Assim como o padrão de classloading de linguagens como Java, os arquivos das classes devem ter o mesmo nome delas, com a extensão .php.
Se quiser alterar esse comportamento, edite o arquivo Autoload.php de config.
Você pode carregar bibliotecas (libs) suas ou de terceiros (que possuam seu próprio mecanismo de autoload) chamando a instrução:
Facil::carregarLib('PDO');
Onde PDO é o prefixo de um arquivo chamado PDOPlugin.php presente no diretório lib.
Para integrar uma nova lib, crie um novo arquivo NovaLibPlugin.php em lib e nele crie uma classe que implemente IPlugin.
Esta interface exige apenas que você declare o método carregar(), útil, por exemplo, para que você possa dar include em algum arquivo que poderá conter instruções spl_autoload_register() para o autoloading das demais classes da lib que você deseja integrar.
Ainda estamos definindo nossos termos de licença Copyleft (C) 2012 Jose Berardo - Comunidade PHP Pernambuco