Juntos Aprendemos …
@expalmer
A Javascript Enthusiast
Juntos Aprendemos Mais :)
Para ver o funcionamento do Slim, vamos criar uma API de cadastro de guitarras, só que
neste post vamos primeiramente criar as rotas de leitura de nosso produto.
Nos posts seguintes, iremos criar o CRUD para deixar completo nosso Rest. Também
veremos o funcionamento de um template engine e usaremos alguma lib javascript para
fazer as ações no front-end.
guitars: A guitarra em sí, ela terá 2 chaves estrangeiras para ( brands e series).
# brands
INSERT INTO brands (id, description, created_at, updated_at) VALUES
(1, 'Gibson', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(2, 'Fender', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(3, 'Epiphone', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(4, 'PRS', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(5, 'Ibanez', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(6, 'Martin', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(7, 'Taylor', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
# series
INSERT INTO series (id, description, created_at, updated_at) VALUES
(1, 'Les Paul', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(2, 'SG', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(3, 'RD', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(4, 'Flying V', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(5, 'Firebird', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(6, 'Statocaster', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(7, 'Telecaster', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(8, 'Jaguar', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(9, 'Custom', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(10, 'Retro', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(11, 'DX', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(12, 'HD-28', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
# guitars
# informamos brand, serie e um nome para a guitarra
INSERT INTO guitars (id, fk_brands, fk_series, description, created_at, updated_at)
(1, 1, 1, 'Standart', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(2, 1, 2, 'Pro', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(3, 1, 3, 'Studio', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(4, 2, 6, 'Standart', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(5, 2, 7, 'Pro', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(6, 2, 8, 'Studio', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(7, 3, 1, 'Standart', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(8, 3, 2, 'Pro', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(9, 4, 9, 'Studio', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(10, 4, 9, 'Standart', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
expalmer.github.io/criando-um-rest-com-slim-framework-e-illuminate-database-em-poucos-minutos-parte-1/ 2/12
28/04/2019 Criando um Rest com Slim Framework e Illuminate Database em poucos minutos - parte 1 - Palmer Oliveira. Juntos Aprendemos …
slim-rest
├── app
│ ├── config
│ │ └── database.php
│ ├── controllers
│ │ └── appControllers.php
│ ├── helpers
│ │ └── appHelpers.php
│ ├── models
│ │ └── appModels.php
├── .htaccess
├── composer.json
└── index.php
3) composer.json
{
"require": {
"slim/slim": "2.4.3",
"illuminate/database": "v4.2.9"
}
}
Esse comando vai baixar um arquivo chamado composer.phar , pois ele que vai fazer o
trabalho de instalar suas dependências.
5) index.php
Esse é nosso arquivo principal de entrada do APP.
<?php
# === constants
# ==================================================
define("_APP", dirname(__FILE__) . '/app');
# === slim
# ==================================================
require 'vendor/autoload.php';
$app = new \Slim\Slim(array(
'debug' => true
));
# === config
# ==================================================
require_once _APP . '/config/database.php';
# === helpers
# ==================================================
require_once _APP . '/helpers/appHelpers.php';
# === models
# ==================================================
require_once _APP . "/models/appModels.php";
# === controllers
# ==================================================
require_once _APP . "/controllers/appControllers.php";
expalmer.github.io/criando-um-rest-com-slim-framework-e-illuminate-database-em-poucos-minutos-parte-1/ 4/12
28/04/2019 Criando um Rest com Slim Framework e Illuminate Database em poucos minutos - parte 1 - Palmer Oliveira. Juntos Aprendemos …
6) .htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
7) app/con g/database.php
<?php
// Database configuration
$settings = array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'database',
'username' => 'user',
'password' => 'password',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => ''
);
8) app/helpers/appHelpers.php
Aqui criei um helper para dar output em json.
<?php
use Slim\Slim;
class helpers {
$app = Slim::getInstance();
$response = new stdClass();
$response->error = $error;
$response->message = $message;
$response->data = $data;
$app->response()->header('Content-Type', 'application/json');
return $app->response()->body( json_encode($response) );
9) app/models/appModels.php
Aqui é onde o Illuminate reconhece nossas classes de Model, apenas crie uma classe
com extends nele, informe o nome da tabela e pronto. Cara, ele é muito útil e possui
muitos outros recursos que fará você ganhar tempo em seus projetos.
Para saber como usar mais recursos do Illuminate, olhe a documentação no site do
Laravel, pois ele usa esse component também.
<?php
expalmer.github.io/criando-um-rest-com-slim-framework-e-illuminate-database-em-poucos-minutos-parte-1/ 6/12
28/04/2019 Criando um Rest com Slim Framework e Illuminate Database em poucos minutos - parte 1 - Palmer Oliveira. Juntos Aprendemos …
}
}
10) app/controllers/appControllers.php
<?php
# === api
# ==================================================
$app->get('/api/v1/brands', function() use ($app) {
$results = Brands::all();
return helpers::jsonResponse(false, 'results', $results );
});
$results = Series::all();
return helpers::jsonResponse(false, 'results', $results );
});
$results = [];
$description = $app->request->get('description');
if ( $description ) {
$results = Guitars::with('Brand')
->with('Serie')
->where('description','LIKE',"%{$description}%")
->get();
} else {
$results = Guitars::with('Brand')
->with('Serie')
->get();
}
$message = $results->count() . ' results';
return helpers::jsonResponse(false, $message, $results );
});
Pronto!!!
expalmer.github.io/criando-um-rest-com-slim-framework-e-illuminate-database-em-poucos-minutos-parte-1/ 7/12
28/04/2019 Criando um Rest com Slim Framework e Illuminate Database em poucos minutos - parte 1 - Palmer Oliveira. Juntos Aprendemos …
http://localhost/slim-rest/api/v1/brands : As marcas.
http://localhost/slim-rest/api/v1/series : Os modelos.
Temos também uma pequena busca no campo description na rota guitars, testa assim:
http://localhost/slim-rest/api/v1/guitars?description=a .
Não expliquei detalhadamente cada arquivo, mas se você tiver alguma dúvida pode me
perguntar que terei o prazer em ajuda-lo. Caso tenha alguma dica de melhoria, será bem
vinda!
Concluindo, o Slim é muito bacana pois em minutos você levanta uma aplicação bem
organizada, rápida e segura. Note que usamos o Illuminate para pegar os dados do
banco, inclusive com join e outras tabelas, e tudo isso de uma forma simples.
That's it!
LOG IN WITH
OR SIGN UP WITH DISQUS ?
Name
Type: Illuminate\Contracts\Container\BindingResolutionException
File: vendor\illuminate\container\Container.php
Line: 763
△ ▽ • Reply • Share ›
# brands
DROP TABLE IF EXISTS `brands`;
CREATE TABLE IF NOT EXISTS `brands` (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
description VARCHAR(50),
created_at DATETIME,
updated_at DATETIME
);
INSERT INTO `brands` (id, description, created_at, updated_at) VALUES
(1, 'Gibson', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(2, 'Fender', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(3, 'Epiphone', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(4, 'PRS', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(5, 'Ibanez', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(6, 'Martin', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(7, 'Taylor', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
see more
△ ▽ • Reply • Share ›
As rotas não tem relação com os arquivos em sí Você cria uma rota e quando a URL
expalmer.github.io/criando-um-rest-com-slim-framework-e-illuminate-database-em-poucos-minutos-parte-1/ 10/12
28/04/2019 Criando um Rest com Slim Framework e Illuminate Database em poucos minutos - parte 1 - Palmer Oliveira. Juntos Aprendemos …
As rotas não tem relação com os arquivos em sí. Você cria uma rota e quando a URL
bater com a rota, você faz o que precisa ( retorna um json, chama um arquivo para
renderizar, redireciona, etc... ).
Não sei se conseguiu entender, mas você criar as rotas e chama os arquivos como
quiser. Acima fiz um exemplo de como ficar mais organizado, criando uma pasta
/views/ + nome do sistema + / + nome do arquivo que será chamado pela rota
respectiva.
Criando um Rest com Slim Framework e Criando seu proprio Array Reduce em
Illuminate Database em poucos minutos - Javascript | Palmer Oliveira. Juntos …
31 comments • 4 years ago 4 comments • 3 years ago
expalmer.github.io/criando-um-rest-com-slim-framework-e-illuminate-database-em-poucos-minutos-parte-1/ 12/12