Framewok php mcquery ( pt-br )

Overview

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 = '[email protected]';
$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>
You might also like...
PHP exercises from my course at ETEC and some of my own play-around with PHP

etec-php-exercises PHP exercises from my course at ETEC and some of my own play-around with PHP Translations: Português (BR) Projects Project Descript

GitHub action to set up PHP with extensions, php.ini configuration, coverage drivers, and various tools.
GitHub action to set up PHP with extensions, php.ini configuration, coverage drivers, and various tools.

GitHub action to set up PHP with extensions, php.ini configuration, coverage drivers, and various tools.

php-echarts is a php library for the echarts 5.0.

php-echarts 一款支持Apache EChart5.0+图表的php开发库 优先ThinkPHP5/6的开发及测试。 Apache EChart5.0已经最新发布,在视觉效果、动画效果和大数据展示方面已经远超之前的版本; 故不考虑EChart5.0之前版本的兼容问题;建议直接尝试5.0+

Minimalist PHP frame for Core-Library, for Developing PHP application that gives you the full control of your application.

LazyPHP lightweight Pre-Made Frame for Core-library Install Run the below command in your terminal $ composer create-project ryzen/lazyphp my-first-pr

Zilliqa PHP is a typed PHP-7.1+ interface to Zilliqa JSON-RPC API.
Zilliqa PHP is a typed PHP-7.1+ interface to Zilliqa JSON-RPC API.

Zilliqa PHP is a typed PHP-7.1+ interface to Zilliqa JSON-RPC API. Check out the latest API documentation. Add library in a composer.json file.

churn-php is a package that helps you identify php files in your project that could be good candidates for refactoring
churn-php is a package that helps you identify php files in your project that could be good candidates for refactoring

churn-php Helps discover good candidates for refactoring. Table of Contents What Is it? Compatibility How to Install? How to Use? How to Configure? Si

Run your WP site on github pages, php innovation award winner  https://www.phpclasses.org/package/12091-PHP-Make-a-WordPress-site-run-on-GitHub-pages.html
Run your WP site on github pages, php innovation award winner https://www.phpclasses.org/package/12091-PHP-Make-a-WordPress-site-run-on-GitHub-pages.html

Gitpress Run wordpress directly on github pages Gitpress won the innovation award for may 2021 Read more about this https://naveen17797.github.io/gitp

A pure PHP implementation of the MessagePack serialization format / msgpack.org[PHP]

msgpack.php A pure PHP implementation of the MessagePack serialization format. Features Fully compliant with the latest MessagePack specification, inc

SublimeLinter 3 plugin for PHP, using php -l.

SublimeLinter-php This linter plugin for SublimeLinter provides an interface to php -l. It will be used with files that have the "PHP", "HTML", or "HT

Releases(v1.7.02)
Owner
Haley Dev
Haley Dev
A sampling profiler for PHP written in PHP, which reads information about running PHP VM from outside of the process.

Reli Reli is a sampling profiler (or a VM state inspector) written in PHP. It can read information about running PHP script from outside of the proces

null 272 Dec 22, 2022
PHP Meminfo is a PHP extension that gives you insights on the PHP memory content

MEMINFO PHP Meminfo is a PHP extension that gives you insights on the PHP memory content. Its main goal is to help you understand memory leaks: by loo

Benoit Jacquemont 994 Dec 29, 2022
A sampling profiler for PHP written in PHP, which reads information about running PHP VM from outside of the process.

Reli Reli is a sampling profiler (or a VM state inspector) written in PHP. It can read information about running PHP script from outside of the proces

null 258 Sep 15, 2022
A multithreaded application server for PHP, written in PHP.

appserver.io, a PHP application server This is the main repository for the appserver.io project. What is appserver.io appserver.io is a multithreaded

appserver.io 951 Dec 25, 2022
Easy to use utility functions for everyday PHP projects. This is a port of the Lodash JS library to PHP

Lodash-PHP Lodash-PHP is a port of the Lodash JS library to PHP. It is a set of easy to use utility functions for everyday PHP projects. Lodash-PHP tr

Lodash PHP 474 Dec 31, 2022
A PHP 5.3+ and PHP 7.3 framework for OpenGraph Protocol

Opengraph Test with Atoum cd Opengraph/ curl -s https://getcomposer.org/installer | php php composer.phar install --dev ./vendor/atoum/atoum/bin/atoum

Axel Etcheverry 89 Dec 27, 2022
A status monitor for Elite Dangerous, written in PHP. Designed for 1080p screens in the four-panel-view in panel.php, and for 7 inch screens with a resolution of 1024x600 connected to a Raspberry Pi.

EDStatusPanel A status monitor for Elite Dangerous, written in PHP. Designed for 1080p screens in the four-panel-view in panel.php, and for 7 inch scr

marcus-s 24 Oct 4, 2022
🐘 A probe program for PHP environment (一款精美的 PHP 探針, 又名X探針、劉海探針)

Simplified Chinese | 简体中文 Traditional Chinese(Taiwan) | 正體中文(臺灣) Traditional Chinese(Hong Kong) | 正體中文(香港) Japanese | 日本語 ?? X Prober This is a probe

Km.Van 1.2k Dec 28, 2022
PHP Text Analysis is a library for performing Information Retrieval (IR) and Natural Language Processing (NLP) tasks using the PHP language

php-text-analysis PHP Text Analysis is a library for performing Information Retrieval (IR) and Natural Language Processing (NLP) tasks using the PHP l

null 464 Dec 28, 2022
PHP generics written in PHP

PHP generics written in PHP Require PHP >= 7.4 Composer (PSR-4 Autoload) Table of contents How it works Quick start Example Features Tests How it work

Anton Sukhachev 173 Dec 30, 2022