menu

Adianti Framework

Guia rápido

Adianti, Framework, PHP, MVC, Active record, Front controller, IDE, RAD, Web, multiplataforma, geração de código, desenvolvimento rápido, relatórios, formulários, listagens, datagrids, gráficos, banco de dados, padrões de projeto, design patterns Guia rápido sobre o Adianti Framework.
Adianti Framework
menu Menu
access_time
Guia rápido
A seguir, os passos mínimos para instalar e configurar uma aplicação no Adianti Framework. Este é um tutorial com recomendações genéricas, tanto para Linux, Windows, ou Mac. Para um tutorial específico, siga este link para Ubuntu Server. Para Windows, existe o excelente Wamp Server. Para Mac OS, recomendamos o instalador php-osx.liip.ch
Livro Adianti Framework
Obra completa sobre o Adianti Framework, escrita pelo criador do framework:
  • check Instalação e configuração; Modelos, persistência e BD;
  • check Componentes de apresentação; Cadastros e listagens;
  • check Logins, permissões, relatórios; Desenvolvimento com Studio Pro.


Passo 1. Apache
Instale e configure o Apache2

Configuração

Altere as configurações do Apache para ele ler os .htaccess presentes na estrutura de diretório do Framework, que protegem determinados diretórios do acesso indevido.
apache2.conf
AllowOverride All
Passo 2. PHP
Instale e configure o PHP7


Módulos recomendados

soap, xml, curl, opcache, gd, sqlite3, mcrypt, mbstring

Configuração para desenvolvimento

Ajuste as configurações para habilitar log de erros, aumentar o limite de RAM, o tempo de execução, o tempo de sessão, e definir limites de upload, etc.
php.ini
error_log = /tmp/php_errors.log
log_errors = On
display_errors = On
memory_limit = 256M
max_execution_time = 120
error_reporting = E_ALL
file_uploads = On
post_max_size = 100M
upload_max_filesize = 100M
session.gc_maxlifetime = 14000

Configuração para produção

Quando a aplicação entrar em produção, desligue a exibição de erros.
php.ini
display_errors = Off

Configuração de Segurança

As seguintes configurações são recomendações para segurança. Substitua CUSTOMSESSID por um nome específico.
php.ini
session.name = CUSTOMSESSID
session.use_only_cookies = 1
session.cookie_httponly = true
session.use_trans_sid = 0
session.entropy_file = /dev/urandom
session.entropy_length = 32
Passo 3. Template de aplicações
Faça download do Adianti Template, o gabarito funcional para construir aplicações no Adianti Framework com menus, permissões, logs, gestão de documentos, inbox, notificações, e outros.

Instalação

Descompacte o template conforme o seu sistema.
Ubuntu: /var/www/html/
Mac OS: /Library/WebServer/Documents/
Windows: C:\wamp64\www\

Será criada uma pasta template. Renomeie-a nome real de seu projeto:
mv template meu-projeto

Alterar em application.ini, o nome da aplicação, de template (default) para o nome real:
app/config/application.ini
application = meu-projeto
Passo 4. Banco de dados
Crie o banco de dados de sua aplicação, usando PostgreSQL, MySQL, SQLite, Oracle, Sql Server, ou Firebird.

Configuração

Configure o conector dentro da aplicação:
app/config/meu-projeto.ini

Cada banco de dados acessado por uma aplicação Adianti Framework deve ser configurado na pasta app/config por um INI.
Para usar o respectivo conector, você deve ter o driver correto habilitado no PHP (ver php.ini).
Obs: A propriedade "prep" habilita prepared statements para todas instruções geradas pelo framework.

A seguir um exemplo de um conector para SQLite:
host = ""
port = ""
name = "app/database/samples.db"
user = ""
pass = ""
type = "sqlite"
prep = "1"

A seguir um exemplo de um conector para PostgreSQL:
host = "192.168.1.102"
port = ""
name = "samples"
user = "postgres"
pass = "postgres"
type = "pgsql"
prep = "1"

A seguir um exemplo de um conector para MySQL:
host = "127.0.0.1"
port = ""
name = "tutor"
user = "root"
pass = "mysql"
type = "mysql"
prep = "1"
Obs: Para usar com encoding iso, adicionar "char = ISO"

A seguir um exemplo de um conector para Oracle:
host = "192.168.1.103"
port = "1521"
name = "tutor"
user = "system"
pass = "12345678"
type = "oracle"
char = "AL32UTF8" // alterar charset de conexão
flow = "1" // garante atributos em lowercase
date = "YYYY-MM-DD" // NLS_DATE_FORMAT
time = "YYYY-MM-DD HH:MI:SS.FF" // NLS_TIMESTAMP_FORMAT
nsep = ",." // NLS_NUMERIC_CHARACTERS

A seguir um exemplo de um conector para Oracle com TNS:
user = "system" pass = "12345678" type = "oracle" tns = "(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.13)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = exemplos) ) )" prep = "1" flow = "1"

A seguir um exemplo de um conector para SQLServer:
host = 192.168.1.103
name = tutor
user = sa
pass = 12345678
type = mssql
prep = "1"
Obs: O type mssql utiliza driver dblib para Linux e sqlsrv para windows. Use também type=dblib ou type=sqlsrv para indicar o driver específico.

A seguir um exemplo de um conector para Firebird:
host = "192.168.0.103"
port = ""
name = "c:\teste2.fdb"
user = "sysdba"
pass = "masterkey"
type = "ibase"
Passo 5. Classe Modelo
Crie classes que representam as tabelas do banco de dados.

Agora é o momento de criar as classes do modelo da aplicação. Uma classe modelo é filha de TRecord. Esta classe do framework fornece métodos básicos de persistência como store(), delete() e load() que manipulam um objeto na base de dados.
app/model/Person.class.php.
  1. <?php
  2. class Person extends TRecord
  3. {
  4.     const TABLENAME 'person';
  5.     const PRIMARYKEY'id';
  6.     const IDPOLICY =  'max'// {max, serial} 
  7.     
  8.     /**
  9.      * Constructor method
  10.      * @param $id Primary key to be loaded (optional)
  11.      */
  12.     public function __construct($id NULL$callObjectLoad TRUE)
  13.     {
  14.         parent::__construct($id$callObjectLoad);
  15.         parent::addAttribute('name');
  16.         parent::addAttribute('address');
  17.         parent::addAttribute('birthdate');
  18.         parent::addAttribute('gender');
  19.     }
  20. }

TABLENAME define o nome da tabela que a classe de modelo irá manipular.
PRIMARYKEY define o campo de chave primária. O framework não manipula chaves compostas.
IDPOLICY define a estratégia para geração de novos ID's. max+1 ou serial (deixa o campo de chave primária vazio e o banco de dados decide seu novo valor).

O método addAttribute() limita quais atributos deste objeto serão persistidos (gravados) na base de dados. Quaisquer atributos que não estejam no addAttribute() serão ignorados pelo mecanismo de persistência. Caso o addAttribute() não seja chamado nenhuma vez, todos atributos serão persistidos.
Passo 6. Classe Controller
Criando páginas para formulários, listagens, e outros.

Agora é o momento de criar as páginas da aplicação. Para tal, podem ser usados componentes, templates, ou outras técnicas. No exemplo a seguir, estamos utilizando um controlador-padrão disponível no framework. O TStandardForm fornece uma abordagem padronizada para manipulação de formulários, que é explicada extensivamente no livro do Framework, onde também é abordada a construção manual de telas, e cada um dos componentes visuais para formulários.

As páginas controladoras de aplicação são salvas no diretório app/control. O controlador-padrão TStandardForm fornece métodos como setDatabase() e setActiveRecord() que definem o nome da base de dados (veja os arquivos INI) e a classe de Active Record que irá manipular os dados do formulário.

app/control/CidadeForm.class.php
  1. <?php
  2. /**
  3.  * CidadeForm Form
  4.  * @author  <your name here>
  5.  */
  6. class CidadeForm extends TStandardForm
  7. {
  8.     protected $form// form
  9.     
  10.     /**
  11.      * Form constructor
  12.      * @param $param Request
  13.      */
  14.     public function __construct$param )
  15.     {
  16.         parent::__construct();
  17.         parent::setDatabase('meu-projeto');
  18.         parent::setActiveRecord('Cidade');
  19.         
  20.         // creates the form
  21.         $this->form = new BootstrapFormBuilder('form_Cidade');
  22.         $this->form->setFormTitle('Cidades');
  23.         $id   = new TEntry('id');
  24.         $nome = new TEntry('nome');
  25.         $uf   = new TEntry('uf');
  26.         $nome->addValidation('Nome', new TRequiredValidator()); 
  27.         
  28.         $id->setEditable(false);
  29.         $id->setSize(100);
  30.         $uf->setSize('70%');
  31.         $nome->setSize('70%');
  32.         $id->setEditable(FALSE);
  33.         
  34.         $this->form->addFields([new TLabel('Id:')],[$id]);
  35.         $this->form->addFields([new TLabel('Nome:''#ff0000')],[$nome]);
  36.         $this->form->addFields([new TLabel('Uf:')],[$uf]);
  37.         // create the form actions
  38.         $this->form->addAction('Salvar', new TAction([$this'onSave']), 'fa:floppy-o')->addStyleClass('btn-primary');
  39.         $this->form->addAction('Limpar formulário', new TAction([$this'onClear']), 'fa:eraser #dd5a43');
  40.         
  41.         // vertical box container
  42.         $container = new TVBox;
  43.         $container->style 'width: 100%';
  44.         $container->class 'form-container';
  45.         $container->add(new TXMLBreadCrumb('menu.xml''CidadeList'));
  46.         $container->add($this->form);
  47.         parent::add($container);
  48.     }
  49. }
Passo 7. Menu
Definindo a estrutura de menu da aplicação

O menu da aplicação é definido no arquivo menu.xml. Este arquivo deve ser construído contendo todas as opções possíveis. A aplicação lê o menu.xml e apresenta o menu para o usuário somente com as opções que ele possui permissão de acesso. Portanto, o arquivo menu.xml é filtrado em tempo de execução.
  1. <menu>
  2. <menuitem label='Cadastros'>
  3. <menu>
  4. <menuitem label='Básicos'>
  5. <menu>
  6. <menuitem label='Pessoas'>
  7. <icon>fa:users blue</icon>
  8. <action>PersonForm</action>
  9. </menuitem>
  10. </menu>
  11. </menuitem>
  12. </menu>
  13. </menuitem>
  14. </menu>
Passo 8. Permissões e login
Configurando permissões de acesso.

Acesso


Agora chegou o momento de rodar a aplicação e configurar as permissões de acesso. Para tal, abrimos o navegador e acessamos:
http://localhost/meu-projeto

Adianti Template ERP


Configuração

1. Logar como "admin" senha "admin";
2. Cadastrar o programa a ser criado em: Administration -> Programs (Preencher Controller="CidadeForm");
3. Conceder a permissão do programa para um usuário ou grupo (Administration -> Users ou Administration -> Groups);
4. Efetuar logout e login novamente com o usuário que tenha permissão de acesso ao programa;
Conheça o Tutor
O Tutor é uma aplicação com exemplos diversos de utilização do Framework.