Skip to content

Minoro/mcquery

Repository files navigation

mcquery

Sobre o mcquery

O MCQUERY foi feito com a intenção de ser um framework que não dependa de outras bibliotecas ou frameworks para funcionar, sendo a única biblioteca utilizada por padrão no mcquery e o PHPMailer sendo essencial para envio de emails com o PHP, mas é claro sinta-se a vontade para instalar quantas dependências forem necessárias para seu projeto, confira a baixo a documentação do mcquery:

composer create-project haleydev/mcquery

Comandos via terminal

mcquery terminal

  • php mcquery controller:Nome cria um novo controller, adicione 'pasta/NomeController' caso queira adicionar uma subpasta

  • php mcquery autoload atualiza o autoload de classes

  • php mcquery conexao testa a conexão com o banco de dados

  • php mcquery install instala as dependências do composer

  • php mcquery env cria um novo arquivo de configurações (.env)

  • php mcquery cache:env armazena e usa as informações do .env em cache

  • php mcquery model:nome cria um novo model

  • php mcquery database:Nome cria uma nova base de dados

  • php mcquery migrate executa as bases de dados pendentes e adiciona models

  • php mcquery drop:tabela exclui uma tabela do banco de dados

  • php mcquery list:migrations lista todas as migrações já executadas

Variáveis de ambiente

// retorna o valor do item declarado em .env
env('TIMEZONE'); // America/Sao_Paulo
// verifica se o item foi declaro em .env retornando true ou false
// se o item estiver com seu valor vazio retornará false
// varios valores podem ser passados separados por , exemplo:
if(env_required('DB_SERVER,DB_USERNAME')){
    // ...
}

Router

Não é obrigatório nomear as rotas, mas é muito útil se você quiser obter a url completa da rota utilizando a função: router('nome');

Para passar parâmetros dinâmicos na url coloque entre chaves exemplo "post/{post}/{id}" em router, e para pegar esse valor utilize a função get('post') , get('id') que ira retornar o valor que esta na url.

Caso queira pegar uma url completa que contém parâmetros utilize router('post', 'php,15') separando os parâmetros a serem substituidos por ",".

A url base definida em .env pode ser acessada pela superglobal ROOT

Você pode chamar um arquivo diretamente, exemplo:

$route->url('/post/{id}', "./Templates/views/post.php")->name('post');

ou chamar uma classe ou função, exemplo:

$route->post('/email', function () {
    (new EmailController)->send();
})->name('email');

URL - Este metodo não permite que a rota tenha parâmetros

Exemplo invalido: www.example.com/blog?p=414906

Exemplo valido: www.example.com/blog

$route->url('/blog', function(){ 
    (new BlogController)->render();
})->name('blog');

GET - Este metodo permite que a rota tenha parâmetros

Exemplo valido: www.example.com/blog?p=414906

$route->get('/blog', function(){ 
    (new BlogController)->render();
})->name('blog');

POST - Para utilizar o metodo POST e necessário ter um token de segurança em seus formulários

Função do mcquery: validate()

Exemplo:

$route->post('/post', function(){ 
    (new PostController)->render();
})->name('post');
<form method="POST" action="<?=router('post')?>">
    <?=validate()?>
    <input type="text" name="email" placeholder="email">
    <input type="text" name="senha" placeholder="senha">
    <input type="submit" value="entrar">
</form>

O HTML ficará assim:

<form method="POST" action="http://localhost/post">
    <input type='hidden' name='token' value='2b32ee40f6ceaa69a91b39abc62c5ccf'/>
    <input type="text" name="email" placeholder="email">
    <input type="text" name="senha" placeholder="senha">
    <input type="submit" value="entrar">
</form> 

AJAX - Ao contrario do metodo POST o metodo AJAX não atualiza o token de segurança a cada requisição, mas ainda e necessário utilizar o token de segurança em seus formulários

Lembrando que este metodo AJAX é via POST.

Exemplo:

$route->ajax('/search', function(){ 
     (new AjaxController)->pesquisa();
})->name('search');

API - Metodo dedicado a APIs, seu header (cabeçalho) ja vem com "Content-Type:application/json"

Os metodos aceitos nas rotas de APIs podem ser varios separados por ",".

Exemplo:

$route->api('/api/genero/{genero}', function(){
     (new ApiController)->genero();
},"get,post")->name('api.genero');

Controllers

O mcquery agiliza a criação de controllers com o comando ( php mcquery controller:NomeController ) caso queira adionar o controller a uma sub pastas basta adicionar "/" , ( php mcquery controller:Pasta/OutraPasta/NomeController ) o resultado será:

namespace Controllers\Pasta\OutraPasta;
use App\Controller;

class NomeController extends Controller
{        
    public $title = "NomeController";
    public $view = "";    

    public function render()
    {
        $this->layout("main");         
    }
}

Para adiocionar um layout,view ou include em um controller utilize as seguintes funções do controller:

OBS: Se layout,view ou include estiverem especificados ( ex: $this->layout = 'main' ) não é necessário especificar o nome nas funções abaixo.

  • $this->layout('nome-do-layout')
  • $this->view('nome-da-view')
  • $this->include('nome-do-include')

Lembrando que estes arquivos devem estar na pasta Templates.

Models e conexão

  • Um model pode ser criado com o comando ( php mcquery model:NomeModel )
  • Ou ele e criado automaticamente ao realizar uma migração via terminal

Lembrando que o banco de dados deve estar devidamente configurado em .env

Você pode acessar o banco de dados diretamente dessa forma:

use App\Conexao;
$conexao = new Conexao;
$conexao->pdo(); // ou $conexao->mysqli();
$conexao->instance; // para realizar operações no banco de dados
$conexao->close(); // para fechar a conexao

Exemplo: Acessando um model.

$select = usuarios::select([
    // todos os itens são opcionais:
    "coluns" => "id,nome,email",
    "limit" => 10,
    "order" => "RAND()", // ou id DESC / id ASC

    // so e possivel usar um de cada vez where ou like
    "where" => [
        "nome" => "mcquery",
        "sobrenome" => "haley"
    ],

    // "like" => [
    //     "nome" => "mc"        
    // ]

    // "join" => "id = outra_tabela.coluna,id = outra_tabela.coluna",
    // ao usar join e necessario especificar os outros argumentos ex: ( "where" => ["usuarios.nome" => "mcquery","usuarios.id" => 1] )
]);
dd($select);


$insert = usuarios::insert([
    // bem simples :)
    "nome" => "mcquery",
    "idade" => "55",
    "sobrenome" => "haley"
]);
dd($insert);


$update = usuarios::update([
    // e bom especificar :)
    "where" => [
        "id" => 5
    ],

    "limit" => 1,

    // array update obrigatorio
    "update" => [
        "nome" => 'novo nome',
        "sobrenome" => 'mudei'
    ]
]);
dd($update);


$delete = usuarios::delete([
    // cuidado! se não especificar toda tabela vai ser apagada
    "limit" => 1,

    "where" => [
        "id" => 1,
        "name" => 'haley'
    ]
]);
dd($delete);

Enviando e-mails

Enviar e-mails no mcquery e bem simples, veja o exemplo abaixo:

use App\Mailer;

$body = '<h1>ola mcquery</h1>';

$email = new Mailer;
$email->email = 'warleyhacker@hotmail.com';
$email->name = 'warley rodrigues';
$email->title = 'ola warley';
$email->body = $body;

// anexo opcinal:
// $email->anexo = 'Public/images/....'; 
$email->send();
        
if($email->result == true){
    echo "email enviado com sucesso";
}

Lembrando que o arquivo .env deve estar configurado para enviar e-mails.

Migration

Para criar um novo arquivo de migração use o comando ( php mcquery database:Nome)

E para executalo ( php mcquery migrate )

use App\Database\{DataTypes, Migration};
require "./App/Database/require.php";
 
(new Migration)->table([($table = new DataTypes),$table->name("usuarios"),

    $table->id(),
    $table->string('nome',100),  
    $table->string('sobrenome', 100),
    $table->string('email',120),
    $table->string('password',100),    
    $table->string('access',20)->default('user'),
    $table->int('idade'),    
    $table->date_created(),
    $table->date_edited()

],$table->result());

Funções mcquery

router()

// retorna a URL da rota nomeada
// se for uma rota com parâmetros, os parâmetros podem ser especificados como o segundo parâmetro da função

router('blog') // retorna http://localhost/blog

// rota com parâmetros
router('blog','post,11') // retorna http://localhost/blog/post/11

active()

// verifica se a url atual é a mesma que a url passada, retornando true ou false
// deve ser passado a url completa
// Exemplo:

active(router('home')) // retorna true

view()

// retorna uma view localizada em Templates/views
view('index')

get()

// retorna o valor do parâmetro passado em router
get('id')

validate()

// cria e imprime um token para segurança de formularios, exemplo:
<input type='hidden' name='token' value='2b32ee40f6ceaa69a91b39abc62c5ccf'/>

token()

// retorna o token atual ou cria um novo, exemplo:
2b32ee40f6ceaa69a91b39abc62c5ccf

unsetToken()

// Desvalida o token atual se existir

getCheck() / postCheck()

// checa se o $_GET ou $_POST existe e se seu valor e nulo, retornando true ou false
// pode ser passado varios $_GET/$_POST separados por ,
// e muito útil para validar formulários,evita que um usuário cause um erro ao modificar o name de um campo no formulário
// exemplo
if(postCheck('name,email,senha')){
    echo "logado";
}else{
    echo "preencha todos os campos";
}

dd()

// equivalente a var_dump() entre tags <pre></pre>

About

Framewok php mcquery ( pt-br )

Resources

License

Stars

Watchers

Forks

Packages

No packages published