Created
October 1, 2019 16:49
-
-
Save enio-infotera/0905709aa36e01ddb4fb505bdb7b2f7e to your computer and use it in GitHub Desktop.
Revisions
-
enio-infotera created this gist
Oct 1, 2019 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,404 @@ # Esqueleto Ambiente de desenvolvimento rápido da Web, baseado na estrutura [Slim] (https://www.slimframework.com) ## Recursos - Com base na estrutura [Slim] (https://www.slimframework.com) - Biblioteca de gerenciamento de modelos [Twig] (https://twig.symfony.com) - Gerenciamento de banco de dados com a biblioteca [Eloquent ORM] (https://laravel.com/docs/5.7/eloquent) - Gerenciamento de correio com a biblioteca [Swift Mailer] (https://swiftmailer.symfony.com) - Manipulação de data e hora com a biblioteca [Carbon] (https://carbon.nesbot.com) - Gerenciamento do sistema de arquivos com a biblioteca [Filesystem] (https://github.com/symfony/filesystem) - Validação de entrada com a biblioteca [Validation] (https://github.com/rakit/validation) - Manipulação de imagens com a biblioteca [Image] (http://image.intervention.io) - Gerenciamento de sessões com a biblioteca [Slim Session] (https://github.com/bryanjhv/slim-session) - Proteção CSRF com a biblioteca [Slim CSRF] (https://github.com/slimphp/Slim-Csrf) - Sistema de autenticação de usuário simples pré-configurado e painel de administração ## Instalação ``` $ composer create-project enio-dev/esqueleto <nome> ``` ``` $ git clone https://github.com/enio-dev/esqueleto.git ``` ## Configuração As configurações básicas podem ser encontradas no arquivo `.env` e todas as configurações no arquivo` config/app.php`. Após a instalação, há poucas coisas que você precisa fazer manualmente. - Adicione `APP_KEY` no arquivo` .env`, que deve ter 16 caracteres. Verifique se ele possui caracteres especiais como `! @ # $ & *?` E combinação de números, caracteres maiúsculos e minúsculos. Não compartilhe com ninguém. Você precisará da chave do aplicativo para registrar os usuários back-end. - Importe `esqueleto.sql` usando [phpMyAdmin] (https://www.phpmyadmin.net) ou crie tabelas` users` e `media` manualmente. Após criar as tabelas do banco de dados, certifique-se de excluir o arquivo `esqueleto.sql`. ```sql CREATE TABLE `admin_accounts` ( `id` int(11) NOT NULL, `activated` tinyint(1) NOT NULL DEFAULT 1, `unique_id` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, `reset_token` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `username` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL, `email` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, `password` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, `logged_count` int(11) NOT NULL DEFAULT 0, `last_logged_at` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `created_at` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, `updated_at` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=COMPACT; ALTER TABLE `admin_accounts` ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `unique_id` (`unique_id`), ADD UNIQUE KEY `email` (`email`); ALTER TABLE `admin_accounts` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; ``` ```sql CREATE TABLE `public_accounts` ( `id` int(11) NOT NULL, `unique_id` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, `activation_token` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `reset_token` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `username` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL, `email` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, `password` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, `logged_count` int(11) NOT NULL DEFAULT 0, `last_logged_at` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `created_at` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, `updated_at` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=COMPACT; ALTER TABLE `public_accounts` ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `unique_id` (`unique_id`), ADD UNIQUE KEY `email` (`email`), ADD UNIQUE KEY `activation_token` (`activation_token`); ALTER TABLE `public_accounts` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; ``` ```sql CREATE TABLE `admin_media` ( `id` int(11) NOT NULL, `name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, `width` int(11) NOT NULL, `height` int(11) NOT NULL, `size` int(11) NOT NULL, `created_at` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, `updated_at` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=COMPACT; ALTER TABLE `admin_media` ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `name` (`name`); ALTER TABLE `admin_media` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; ``` - Certifique-se de atualizar `APP_URL` no arquivo` .env` com o URL do seu aplicativo - Atualize `APP_MEDIA` no arquivo` .env` com seu caminho absoluto para o diretório `resources/media` - Certifique-se de definir `APP_ERRORS` verdadeiro no arquivo` .env` no modo de produção ## Variáveis ambientais Variáveis de ambiente podem ser encontradas no arquivo `.env`. Aqui está a referência para `.env`. - `APP_NAME` - Defina o nome do seu aplicativo - `APP_DESCRIPTION` - Defina a descrição do aplicativo - `APP_KEYWORDS` - Defina as palavras-chave do seu aplicativo - `APP_AUTHOR` - Defina o nome do autor do aplicativo. Provavelmente você. - `APP_URL` - Defina o URL do aplicativo ou ele quebrará o sistema - `APP_EMAIL` - Defina o email padrão do aplicativo - `APP_TIMEZONE` - Defina o fuso horário padrão do aplicativo - `APP_KEY` - Defina a chave do aplicativo aqui. Isso tem que ter 16 caracteres. Não compartilhe com ninguém. Todas as senhas serão hash com essa chave. Depois de definir a chave, não a altere, pois isso danificará o sistema. E provavelmente você precisará da chave do aplicativo para registrar usuários de back-end. - `APP_MEDIA` - Defina o caminho absoluto para fazer upload de mídia ou ele quebrará o sistema - `APP_ERRORS` - No modo de produção, defina-o como verdadeiro. As opções disponíveis são `true` e` false`. - `APP_HASH` - Define o método de hash da senha. Depois de definir o método, não o altere, pois isso danificará o sistema. As opções disponíveis são `bcrypt`,` argon2i` e `argon2id`. - `DB_DRIVER` - Defina o driver do banco de dados - `DB_HOST` - Define o host do banco de dados - `DB_DATABASE` - Define o nome do banco de dados - `DB_USERNAME` - Define o nome de usuário do banco de dados - `DB_PASSWORD` - Define a senha do banco de dados - `DB_CHARSET` - Define o conjunto de caracteres do banco de dados - `DB_COLLATION` - Definir agrupamento do banco de dados - `DB_PREFIX` - Defina o prefixo da tabela - `MAIL_HOST` - Define o host SMTP - `MAIL_PORT` - Defina a porta SMTP - `MAIL_USERNAME` - Defina o nome de usuário SMTP - `MAIL_PASSWORD` - Define a senha SMTP ## Controllers Os controladores de aplicativos podem ser encontrados no diretório `app/Controller`. Toda classe de controlador deve estender a classe `App\Controller\Common\Base`. ```php namespace App\Controller; use App\Controller\Base; use Slim\Http\Request; use Slim\Http\Response; class ExmpleController extends Base { public function exampleMethod(Request $request, Response $response, array $data) { // Código vai aqui } } ``` Obtenha pacotes contidos nos controladores usando a variável `$this->container` do controlador `Base`. ```php $package = $this->container->get('package'); ``` Gerencie models em controladores usando o método `$this->view` no controlador `Base`. Para passar dados como variável [Twig] (https://twig.symfony.com), use a variável `$ this-> data` do controlador` Base`. Para mais informações, consulte [Twig documentation] (https://twig.symfony.com/doc/2.x). ```php $this->data['variable'] = "Some data"; $this->view($response, 'example.twig'); ``` Envie mensagens nos controladores usando o método `$this->mail` do controlador `Base`. Para obter mais informações, consulte [documentação do Swift Mailer] (https://swiftmailer.symfony.com/docs/introduction.html). ```php $this->mail([ 'subject' => 'Mail Subject', 'from' => ['John Doe' => '[email protected]'], 'to' => ['Brad Peter' => '[email protected]'], 'body' => 'Mail Body' ]); ``` Manipule tempo e dados nos controladores usando a variável `$this->time` do controlador` Base`. Para mais informações, consulte [Documentação do Carbono] (https://carbon.nesbot.com/docs). ```php $this->time ``` Gerencie o sistema de arquivos nos controladores usando a variável `$this->filesystem` do controlador `Base`. Para obter mais informações, consulte [Documentação do sistema de arquivos] (https://symfony.com/doc/current/components/filesystem.html). ```php $this->filesystem ``` Valide os campos de entrada do formulário nos controladores usando o método `$this->validator` no controlador` Base`. Para obter mais informações, consulte [Documentação de validação] (https://github.com/rakit/validation/blob/master/README.md). ```php $validation = $this->validator($request, [ 'input' => 'required|min:6|max:16' ]); ``` Manipule imagens nos controladores usando o método `$this->image` do controlador` Base`. Para mais informações, consulte [Documentação da imagem] (http://image.intervention.io). ```php $image = $this->image('path/to/image.jpg'); ``` Obtenha o usuário atual `id`,` nome de usuário`, `email`,` lastLogin` e `loginCount` usando o método` $this->authGet` do controlador `Base`. Para verificar se autenticado, use a variável `$this->authCheck` do controlador` Base`. ```php $this->authGet('username'); ``` ## Routes As rotas de aplicativos podem ser encontradas no arquivo `app/routes.php`. Para obter mais informações, consulte [documentação Slim] (https://www.slimframework.com/docs). ```php use App\Controller\ExampleController; $app->get('/example-route', ExampleController::class . ':exampleMethod'); ``` ## Models Os modelos de aplicativos podem ser encontrados no diretório `app/Model`. Toda classe de modelo deve estender a classe `Illuminate \ Database \ Eloquent\Model`. Para obter mais informações, consulte [documentação do Eloquent ORM] (https://laravel.com/docs/5.7/eloquent). ```php namespace App\Model; use Illuminate\Database\Eloquent\Model; class ExampleModel extends Model { public $timestamps = true; protected $table = "example"; } ``` ## Views As visualizações de aplicativos podem ser encontradas no diretório `resources/views` e todos os outros modelos podem ser encontrados no diretório` resources / views / common`. (Páginas de erro, modelo de correspondência etc.) Phyxle usa [Twig] (https://twig.symfony.com) como mecanismo de modelo. Você pode estender o Twig adicionando mais filtros ou funções ou variáveis globais que podem ser encontradas no diretório `app/Extension`. Para mais informações, consulte [Twig documentation] (https://twig.symfony.com/doc/2.x/). Defina assets usando o filtro `asset`. ```twig {{ 'css/example.css'|asset }} ``` Obtenha imagens brutas da mídia carregada no painel de administração usando o filtro `media`. ```twig {{ 'example.jpg'|media }} ``` Obtenha miniaturas da mídia carregada no painel do administrador usando o filtro `thumbnail`. ```twig {{ 'example.jpg'|thumbnail }} ``` Defina os URLs da página interna usando o filtro `link '. ```twig {{ 'path/to/page'|link }} ``` Obtenha variáveis de ambiente no arquivo `.env` usando a função` getenv`. ```twig {{ getenv('VARIABLE') }} ``` Aqui estão todas as variáveis globais disponíveis. ```twig {# Obter nome do aplicativo #} {{ nome do aplicativo }} {# Obter descrição do aplicativo #} {{app.description}} {# Obter palavras-chave do aplicativo #} {{app.keywords}} {# Obter autor do aplicativo #} {{app.author}} {# Obter o URL do aplicativo #} {{app.url}} {# Obtenha a versão atual do PHP #} {{app.php}} {# Verifique se autenticado como administrador #} {{auth.admin.check}} {# Verifique autenticado como ID do usuário administrador} {{auth.admin.id}} {# Obter o nome de usuário do usuário administrador autenticado #} {{auth.admin.username}} {# Obtenha o email do usuário administrador autenticado #} {{auth.admin.email}} {# Obtenha o carimbo de data e hora do último login do usuário administrador autenticado #} {{auth.admin.login.last}} {# Obtenha a contagem de logon do usuário administrador autenticado #} {{auth.admin.login.count}} {# Verifique se autenticado como público #} {{auth.admin.check}} {# Obtenha o nome de usuário do usuário público autenticado #} {{auth.public.username}} {# Obtenha o email do usuário público autenticado #} {{auth.public.email}} {# Obtenha o carimbo de data e hora do último login do usuário público autenticado #} {{auth.public.login.last}} {# Obter número de logon do usuário público autenticado #} {{auth.public.login.count}} {# Obtenha a chave de nome CSRF #} {{csrf.name.key}} {# Obtenha o valor do nome CSRF #} {{csrf.name.value}} {# Obter chave de token CSRF #} {{csrf.token.key}} {# Obtenha o valor do token CSRF #} {{csrf.token.value}} ``` **Nota:** Você deve usar os campos de nome e token CSRF em todos os formulários. ```twig <input name="{{ csrf.name.key }}" type="hidden" value="{{ csrf.name.value }}" /> <input name="{{ csrf.token.key }}" type="hidden" value="{{ csrf.token.value }}" /> ``` ## Middleware O middleware do aplicativo pode ser encontrado no diretório `app/Middleware`. Para mais informações, acesse [Slim documentation] (https://www.slimframework.com/docs). ```php namespace App\Middleware; use Slim\Http\Request; use Slim\Http\Response; class ExampleMiddleware { public function __invoke(Request $request, Response $response, callable $next) { // Codigo aqui return $next($request, $response); } } ``` Após criar ou instalar o middleware, primeiro você precisa adicionar seu middleware ao container. Para isso, crie um novo arquivo usando o nome do middleware no diretório `config/middleware`.``` $ cd config/middleware $ touch example.php ``` ```php use App\Middleware\ExampleMiddleware; use Slim\Container; $container['example'] = function(Container $container) { $example = new ExampleMiddleware; return $example; }; ``` Em seguida, carregue acima do contêiner no arquivo `index.php`. É importante adicionar linha de solicitação após outro middleware e antes dos pacotes. ```php require_once __DIR__ . "/config/middleware/csrf.php"; require_once __DIR__ . "/config/middleware/auth.php"; // Add your container here require_once __DIR__ . "/config/view.php"; require_once __DIR__ . "/config/filesystem.php"; ``` ```php require_once __DIR__ . "/config/middleware/example.php"; ``` Depois disso, carregue seu middleware no arquivo `app / middleware.php`. É importante adicionar a linha superior requerida de todos os outros middlewares. ```php // Adicione seu middleware aqui $app->add($container->get('auth')); $app->add($container->get('csrf')); ``` ```php $app->add($container->get('example')); ``` ## Packages Você pode instalar pacotes usando o Composer. Para mais informações, consulte [Documentação do compositor] (https://getcomposer.org/doc). ``` $ composer require <vendor>/<package> ``` Assim como no middleware, após a instalação do pacote, primeiro você precisa adicionar o novo pacote de instalação ao contêiner. Para isso, crie um novo arquivo usando o nome do pacote no diretório `config`. ``` $ cd config $ touch package.php ``` ```php use Slim\Container; use Vendor\Package; $container['package'] = function(Container $container) { $package = new Package; return $package; }; ``` Em seguida, carregue acima do contêiner no arquivo `index.php`. É importante adicionar a linha de fundo requerida de todos os outros pacotes. ```php require_once __DIR__ . "/config/time.php"; require_once __DIR__ . "/config/image.php"; // Adicione seu contêiner aqui ``` ```php require_once __DIR__ . "/config/example.php"; ``` Depois disso, você pode usar o pacote usando a classe `Slim\Container`. ```php $container->get('package'); $this->container->get('package'); ```