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
- Variáveis de ambiente
- Router o básico
- Controllers
- Models e conexão
- Migration
- Enviando e-mails
- Funções mcquery
Comandos via 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>