Desenvolvimento de Plugins
O Wireless Monitor utiliza a framework Laravel (5.2). Para a criação de um plugin é necessário criar um Package do Laravel.
Criação de um Package
No terminal, dentro do diretório do projeto, execute o comando:
gulp create-plugin --vendor <vendor> --plugin <plugin>
Troque <vendor>
pelo nome do desenvolvedor ou empresa, ex. sanusb
,
e <plugin>
pelo nome do plugin, ex. temperature
.
Estrutura de diretórios
A estrutura de diretórios ficará da seguinte forma:
packages/sanusb/temperature/
├── composer.json
├── phpunit.xml
├── src
│ ├── assets
│ │ ├── components
│ │ │ └── temperature.js
│ │ └── templates
│ │ └── temperature
│ │ ├── index.mustache
│ │ └── show.mustache
│ ├── Http
│ │ └── Controllers
│ │ └── TemperatureController.php
│ ├── migrations
│ │ └── insert_temperature_monitor.php
│ ├── Providers
│ │ └── TemperatureServiceProvider.php
│ ├── storage
│ │ └── json-schema
│ │ └── temperature.json
│ └── views
│ └── save.blade.php
└── tests
├── controllers
│ └── TemperatureControllerTest.php
└── migrations
└── DatabaseTest.php
Arquivos
No arquivo src/Http/Controllers/TemperatureController.php
é necessário
a implementação dos métodos:
create
- configura e chama a página para adicionar novo monitorstore
- valida e guarda os dados no banco
No arquivo src/views/save.blade.php
é preciso indicar os campos
que estarão presentes no Monitor. A alteração impacta diretamente
no método store
citado anteriormente.
No arquivo src/migrations/insert_temperature_monitor.php
é necessário
apenas indicar qual o ícone do Monitor. O sistema usa o conjunto de ícones
customizado com a ferramenta IcoMoon. No diretório
custom-fonts
existe um arquivo selection.json
que pode ser importado
no IcoMoon para adicionar novas fontes. As fontes são desenvolvidas usando
arquivos SVG. Caso não tenha uma fonte você pode escolher um já disponível
no site.
Após salvar o monitor é necessário editar o arquivo que o apresenta na lista
de Monitores do usuário. O arquivo src/assets/templates/temperature/index.mustache
é o template para um item da lista (URL: /monitor
).
Os detalhes do Monitor são mostrados usando o arquivo
src/assets/templates/temperature/show.mustache
(URL: monitor/{id}
).
Mais detalhes sobre a sintaxe do Mustache em:
A indicação do formato dos dados que o usuário deve enviar fica definido em
src/storage/json-schema/temperature.json
. Mais detalhes sobre a validação
com JSON Schema em:
Habilitar Novo Plugin
OBS: esse procedimento no futuro deve ser automatizado, quando os packages virarem dependências do composer!
Edite o arquivo composer.json
do diretório raiz do sistema, e adicione a linha
"Sanusb\\Temperature\\": "packages/sanusb/temperature/src/"
na seção autoload
:
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/",
"Sanusb\\Temperature\\": "packages/sanusb/temperature/src/"
}
},
Em seguida edite o arquivo app/Http/routes.php
e adicione a linha:
<?php
/* ... */
Route::resource('temperature', '\Sanusb\Temperature\Http\Controllers\TemperatureController');
abaixo de Route::auth();
, para que somente usuários logados possam ver.
Além disso é necessário informar o Provider em config/app.php
, na seção providers
:
'providers' => [
/* ... */
Sanusb\Temperature\Providers\TemperatureServiceProvider::class,
]
Ao final temos recarregar as configurações do composer, executando:
php composer.phar dump-autoload -o
php artisan vendor:publish --provider="Sanusb\Temperature\Providers\TemperatureServiceProvider"
php artisan migrate
Desenvolver o plugin
Inicie o servidor php:
php artisan serve
Em outro terminal inicie o gulp
para verificar e atualizar as alterações
feitas em arquivos .js
, .css
, .mustache
:
gulp watch
Testar o plugin
Os testes são feitos usando a ferramenta PHPUnit. Para executar:
./vendor/bin/phpunit packages/vendor/plugin/
Substituindo vendor
e plugin
para seus respectivos valores.