├── .docker
├── .gitignore
└── mysql
│ └── .gitkeep
├── .editorconfig
├── .env.sample
├── .gitignore
├── LICENSE
├── README.md
├── _config.yml
├── app
├── resources
│ ├── email
│ │ └── .gitkeep
│ ├── locales
│ │ ├── .gitkeep
│ │ ├── en
│ │ │ └── error.php
│ │ └── pt-br
│ │ │ └── error.php
│ └── view
│ │ ├── _layout
│ │ └── basic
│ │ │ ├── body.php
│ │ │ ├── head.php
│ │ │ └── html.php
│ │ ├── index.php
│ │ └── whoops.php
├── revisions
│ └── .gitkeep
├── routes
│ └── index.php
└── src
│ ├── .gitkeep
│ └── Controller
│ └── View.php
├── composer.json
├── config
├── app.php
├── cors.php
├── database.php
├── defaults.php
├── mail.php
└── route.php
├── docker-compose.yml.sample
├── phpmd.xml
├── public
├── .htaccess
├── assets
│ ├── favicon.ico
│ ├── images
│ │ ├── .gitkeep
│ │ ├── building.png
│ │ ├── favicon
│ │ │ ├── android-chrome-192x192.png
│ │ │ ├── android-chrome-512x512.png
│ │ │ ├── apple-touch-icon.png
│ │ │ ├── browserconfig.xml
│ │ │ ├── favicon-16x16.png
│ │ │ ├── favicon-32x32.png
│ │ │ ├── favicon.ico
│ │ │ ├── manifest.json
│ │ │ ├── mstile-150x150.png
│ │ │ └── safari-pinned-tab.svg
│ │ └── logo.png
│ ├── logo.png
│ ├── scripts
│ │ └── .gitkeep
│ └── styles
│ │ ├── .gitkeep
│ │ └── style.css
└── index.php
├── simples
└── storage
└── .gitkeep
/.docker/.gitignore:
--------------------------------------------------------------------------------
1 | /mysql/*
2 | !/mysql/.gitkeep
3 |
--------------------------------------------------------------------------------
/.docker/mysql/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phpzm/simples/56d12819b23e5009590be377747e299856d42127/.docker/mysql/.gitkeep
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | indent_style = space
6 | indent_size = 2
7 | end_of_line = lf
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
11 | [*.js]
12 | indent_style = space
13 |
14 | [*.php]
15 | indent_size = 4
16 |
17 | [*.sh]
18 | indent_size = 4
19 |
20 | [{*.json,*.yml}]
21 | indent_style = space
22 | indent_size = 2
23 |
--------------------------------------------------------------------------------
/.env.sample:
--------------------------------------------------------------------------------
1 | [API]
2 | AUTH_TOKEN=X-Auth-Token
3 |
4 | [ENVIRONMENT]
5 | DEFAULT_DATABASE=default
6 | TEST_MODE=TRUE
7 | SECURITY=
8 | ERRORS_DISPLAY=Off
9 | ERRORS_LOG=Off
10 | ERRORS_TRACK=Off
11 | ERRORS_HTML=Off
12 |
13 | [MYSQL_DEFAULT]
14 | MYSQL_DEFAULT_HOST=host
15 | MYSQL_DEFAULT_DATABASE=database
16 | MYSQL_DEFAULT_PORT=3306
17 | MYSQL_DEFAULT_USER=user
18 | MYSQL_DEFAULT_PASSWORD=password
19 |
20 | [MAIL_DEFAULT]
21 | SMTP_DEFAULT_HOST=smtp.mailgun.org
22 | SMTP_DEFAULT_PORT=587
23 | SMTP_DEFAULT_SECURE=tls
24 | SMTP_DEFAULT_USER=user
25 | SMTP_DEFAULT_PASSWORD=password
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # directories
2 | /.git
3 | /.idea
4 | /nbproject
5 | /.docker
6 | /.dev
7 | /.docs
8 | /storage/*
9 | /vendor
10 |
11 | # files
12 | /.env
13 | /docker-compose.yml
14 | *.cache
15 | *.log
16 |
17 | # reverse
18 | !*.gitkeep
19 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 Grupo de PHP da Zona da Mata
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Simples
2 |
3 | O Simples é um projeto que reúne um conjunto de pacotes para trabalhar com PHP de forma rápida e minimalista. Menos é mais!
4 |
5 | ## Instalação
6 | Para começar a usar o Simples você pode usar o comando:
7 | ```shell
8 | $ composer create-project phpzm/simples
9 | ```
10 | ou fazer uma cópia da branch master do repositório
11 | ```shell
12 | $ git clone https://github.com/phpzm/simples.git
13 | $ cd
14 | $ rm .git
15 | $ composer install
16 | ```
17 |
18 | Neste momento você já tem baixada uma arquitetura básica, e é preciso configurar alguns detalhes para sair usando feliz da vida recursos básicos para um desenvolver um site ou sistema em PHP.
19 |
20 | ## Configurações do Ambiente
21 |
22 | As duas configurações que são disponibilizadas como base que vamos citar abaixo são direcionadas para a mesma url: `http://localhost:8080`
23 | Antes de iniciar qualquer um dos modos do servidor, faça uma cópia do arquivo de exemplo do `.env` que é disponibilizado com o projeto
24 | ```shell
25 | $ composer run env:init
26 | ```
27 |
28 | ### Docker
29 |
30 | Cria uma cópia do arquivo de exemplo que é disponibilizado junto com o projeto
31 | ```shell
32 | $ composer run docker:init
33 | ```
34 |
35 | Em seguida você pode usar o comando que está acostumado para rodar os containers ou usar
36 | ```shell
37 | $ composer run docker:serve --timeout=0
38 | ```
39 |
40 | ### Built-in Server
41 |
42 | Para utilizar o o servidor de desenvolvimento que vem junto com o PHP utilize os comandos abaixo
43 |
44 | ```shell
45 | $ composer run php:serve --timeout=0
46 | ```
47 |
48 | Se deu tudo certo, ao acessar a url `http://localhost:8080` você já verá nossa página padrão de apresentação
49 |
50 | ## Visão Geral
51 |
52 | Certo, a url que deveria funcionar está ok, mas vamos fazer um apanhado geral do que aconteceu para ela rodar.
53 |
54 | ### /public
55 | Nesta pasta você encontrará o único ponto de entrada para requisições que sua aplicação terá. Ao abrir o arquivo `index.php` que tem dentro dela encontramos a primeira interação com os arquivos do Simples. Além do arquivo PHP, nela também ficam arquivos que costumamos chamar de `assets`. São eles as imagens, arquivos de estilo e recursos usados para aprimorar a visualização dos recursos da aplicação. Esta pasta será usada para deixar expostos documentos que podem ser acessados por qualquer pessoa.
56 |
57 | ### /config
58 | Este diretório contém uma lista de arquivos PHP que são usados para configurar comportamentos da aplicação. Enquanto estiver dando uma olhada nesses arquivos verá que existe por lá uma função chamada `env` sendo utilizada para definir algumas propriedades. Esta função recupera os valores que estão definidos no `.env`.
59 |
60 | ### /app
61 | Finalmente chegamos onde a festa acontece. O Simples vem com as configurações adequadas para usar este diretório para consultar os documentos que você irá criar. Como você poderá fazer muita coisa, dividimos tudo em partes.
62 |
63 | #### /app/resources
64 | Abriga os documentos relacionados a composição dos recursos de forma indireta. Ele vem configurado inicialmente com 3 diretórios (email, locales, view), mas você pode crescer ele a vontade. É possível ver no arquivo `config/app.php` uma instrução de configuração semelhante a essa abaixo. Com base no exemplo, podemos usar o helper `config('app.resources.root')` que será retornado o valor `app/resources` e é assim que o Simples localiza os recursos que usa.
65 |
66 | `[config/app.php]`
67 | ```php
68 | [
71 | 'root' => 'app/resources',
72 | ]
73 | (...)
74 | ```
75 | Veremos mais sobre essa parte das `views` e sobre sua utilização da seção de Templates.
76 |
77 | #### /app/routes
78 | Esse é um caminho sugerido para utilização das rotas. Ele está descrito em `config/route.php` onde é possível informar um array de arquivos que serão inicializados para compor as rotas da aplicação.
79 |
80 | `[config/route.php]`
81 | ```php
82 | [
85 | 'app/routes/index.php'
86 | ]
87 | (...)
88 | ```
89 | Sendo assim, quando uma requisição HTTP for enviada para o `public/index.php` ele irá começar a procurar por rotas no arquivo `app/routes/index.php`. Mais pra frente, na seção de criação de rotas, veremos como criar rotas de forma organizada utilizando o Simples.
90 |
91 | #### /app/src
92 | Esta pasta está diretamente relacionada ao `autoloader` do `Composer` através da configuração no `composer.json`
93 |
94 | `[composer.json]`
95 | ```
96 | (...)
97 | "autoload": {
98 | "psr-4": {
99 | "App\\": "app/src/"
100 | }
101 | }
102 | (...)
103 | ```
104 | Ou seja, o namespace padrão que você irá utilizar é o `App` e o arquivo deverá estar dentro da pasta descrita acima. Obviamente você pode modificar isso. Note que usando a convenção `PSR-4` quando você criar um documento com o `namespace` adequado poderá usá-lo de forma transparente. Entraremos em mais detalhes sobre isso na seção de composição de estruturas.
105 |
106 | ## /storage
107 | Como forma de indicar um caminho inicial sugerimos essa pasta chamada `storage` na raiz do projeto para a manutenção de documentos que não podem ficar abertos ao acesso público.
108 |
109 | ## /vendor
110 | A pasta `vendor` é criada automaticamente pelo `Composer`. Ela tem as dependências que seu projeto irá utilizar e as configurações de carregamentos de arquivos. Ela está por padrão configurada no arquivo `.gitignore` para ser ignorada pelo `Git`
111 |
112 | ## Iniciando os Trabalhos
113 | ### Criando rotas
114 |
115 | A configuração de qual a primeira rota (ou quais as primeiras rotas) será chamada fica por padrão dentro de `app/config/route.php`.
116 |
117 | As configurações de acesso aos recursos da aplicação podem ser feitas nos arquivos de rotas. Os comandos podem ser escritos diretamente no corpo do arquivo (onde uma variável $router estará disponível por questões de escopo) ou usando o retorno de closures que recebem o $router como parâmetro.
118 |
119 | Rotas simples
120 | ```php
121 | return function($router) {
122 |
123 | $router->on('GET', '/', function() {
124 | return 'Hello World!';
125 | });
126 | }
127 | ```
128 |
129 | Rotas dinâmicas
130 | ```php
131 | return function($router) {
132 |
133 | $router->get('/:controller/:method', function($controller, $method) {
134 | return 'Hello World!';
135 | });
136 | }
137 | ```
138 |
139 | Grupos de Rotas
140 | ```php
141 | return function($router) {
142 |
143 | // lista com arquivos de rota
144 | $router->group('GET', '/site', ['more/files/routes.php', 'more/files/site.php']);
145 |
146 | // pasta que contém arquivos de rotas
147 | $router->group('*', '/api', 'api/routes');
148 | }
149 | ```
150 |
151 | Rotas com Interação com Controllers
152 | ```php
153 | return function($router) {
154 |
155 | $router->post('/client/save', '\Namespace\ClientController@save');
156 | $router->resource('client', '\Namespace\ClientController');
157 | }
158 | ```
159 | Um `$router->resource` vai criar:
160 |