/little

Framework para ensino sobre MVC

Primary LanguagePHPMIT LicenseMIT

little

O que é?

little é um framework desenvolvido para auxiliar novos programadores na arquitetura MVC, além disso, também tem como objetivo ajudar os programadores a serem introduzidos ao uso de um framework.

Por que?

Muitas dúvidas surgem a cada avanço no estudo de uma linguagem, nesse caso o PHP. Pensando nessas dúvidas, resolvi criar esse framework para sanar as possíveis dúvidas que surgem em relação a MVC e Framework.  

O Que é MVC?

É nada mais que um padrão de arquitetura de software, separando sua aplicação em 3 camadas. A camada de interação do usuário(view), a camada de manipulação dos dados(model) e a camada de controle(controller).

Model - é camada que manipula dados. Ele é responsável pela leitura e escrita de dados, e também de suas validações.

View - é a camada de interação com o usuário. Tudo o que ele ver, deve vir dessa camada.

Controller - faz a interligação entre as camadas Model e View. É ele quem decide o que usar e quando usar.

Instalação

Para usufruir dos recurso do framework tenha instalado em seu equipamento:

  • PHP 7.0 >=
  • MySQL
  • Composer

Caso tudo esteja certo, rode o comando abaixo, substituindo path pelo nome da sua aplicação:

composer create-project little/little path

Para uma melhor utilização, crie um virtualhost ou utilize o servidor embutido do PHP

O Framework

O framework utiliza alguns nomes em inglês para ajudar na introdução de desenvolvedores ao mundo dos frameworks, onde os principais frameworks são completamente em inglês. A pasta APP, é nela que seus arquivos deverão ficar, na qual existe subdivisões, como:  

Rotas

Acesse o arquivo App/web.php. Você verá algo assim:

<?php

use Config\Init\Route;

Route::add(['/', 'Example', 'hello']);

A primeira linha é para criar um apelido para a classe Route, evitando que a cada vez que uma nova rota for adicionada, fosse necessário escrever todo o namespace da classe.
A linha seguinte é um exemplo de uso de uma rota.

Adicionando rotas

Adicione suas rotas no arquivo App/web.php com a seguinte configuração:

Route::add(['/', 'Example', 'hello']);

Onde o primeiro parametro do array é a sua uri, o segundo, a sua classe que está na pasta App/Controllers/ e o terceiro parametro é o método desejado.

Rotas Dinâmicas

Obtenha rotas dinâmicas acrescentando um @ onde será dinâmico, como no exemplo:  

Route::add(['/detalhe/@', 'Example', 'detalhe']);

Database

Abra o arquivo App/db.ini será o arquivo de configguração com o banco de dados, importante frisar que só é possível conexão utilizando o banco mysql. No arquivo você encontrará 4 itens a serem configurados:

HOST=localhost onde este é o caminho do banco de dados.

DBNAME=exemplo onde este será o nome do database criado.

USER=test código do usuário do banco.

PASS=123 senha do usuário do banco.

Models

Dentro da pasta App/Models/ ficará suas models, na qual sempre que uma classe representar uma tabela no banco, deverá estender a classe Table:

namespace App\Models;

use Config\Model\Table;

class MyModel extends Table

Tornando sua classe uma Table e assim adquirindo novas funcionalidades, como:

table - é um atributo estático no qual será atribuído o nome da tabela que se deseja utilizar:  

namespace App\Models;Tornando sua classe uma Table e assim adquirindo novos métodos, como: 

use Config\Model\Table;

class MyModel extends Table
{
    protected static $table = "mymodel";
}

all() - retorna todos os dados da tabela:

public function hello()
{
    MyModel::all();
}

find() - retorna a tupla de um dado especifico:

public function hello()
{
    MyModel::find('id', $url[1]);
}

Onde o primeiro parametro é a coluna do banco, e o segundo o valor que se deseja buscar.

insert() - insere um valor no banco, retornando true se inserido:

public function hello()
{
    $id = 1;
    $nome = 'teste';
    $email = 'exemplo@email.com';
    MyModel::insert(['id' => $id, 'nome' => $nome, 'email' => $email])
}

Um array é passado, onde o indice é a coluna do banco e a chave o valor a ser inserido.

delete() - exclui determinado valor do banco, retornando true se o dado for excluído com sucesso:

public function hello()
{
    MyModel::delete('id', $id)
}

Onde o primeiro parametro é a coluna do banco, e o segundo parametro é o valor o qual se deseja excluir.

update() - atualiza determinado dado do banco retornando true se atualizado com sucesso:

public function hello()
{
    MyModel::update("nome", $nome, 'nome', '\''.$antigoValor.'\'');
}

Onde o primeiro parametro é a coluna que deseja atualizar, o segundo o valor atualizador, o terceiro a coluna na qual se deseja busca o valor, e o quarto parametro é o valor a ser atualizado.

Views

Dentro da pasta App/View/ ficaram suas views, na qual deverá ter a extensão .php

Controllers

Toda classe controller que for utilizada pela rota, deverá estender a classe Controller:

namespace App\Controllers;

use Config\Controller\Controller;

class Example extends Controller
{
}

As classes que estenderem de Controller, herdarão algumas propriedades descritos a seguir:

view - atributo para enviar valores uma página de vizualização:

class Example extends Controller
{
    public function hello()
    {
        $this->view->exemplo = "Enviando dados para a view";
        return $this->template('index');
    }
}

Na view você chamará o atributo igual como está na sua classe controller.

template() - método que serve para chamar a view desejada, evitando assim o uso de require:

class Example extends Controller
{
    public function hello()
    {
        return $this->template('index');
    }
}

input() - método utilizado para retornar valores enviados via POST. Caso desejar pegar um valor especifico, basta passar o campo name do valor que se deseja pegar;

class Example extends Controller
{
    public function hello()
    {
        $nome = $this->input('nome');
        return $this->template('index');
    }
}

Caso nenhum valor seja passado por parâmetro, o método input() retornará um array com todos os valores enviados via POST.

class Example extends Controller
{
    public function hello()
    {
        $valoresDePost = $this->input();
        return $this->template('index');
    }
}

get() - método para retorna valores do tipo GET. Este método retorna um array de valores do tipo GET.

class Example extends Controller
{
    public function hello()
    {
        $valoresDeGet = $this->get();
        return $this->template('index');
    }
}

Mais Informações

Como o framework é bem limitado, pode ser acrescido de novas funcionalidades, veja a página de configuração do framework, faça um fork e melhore o mesmo.