Estrutura do Projeto: Amim Knabben < [email_address] > Rafael Bozzetti <rafael@thesource.com.br>
Tópicos Histórico do Snep
Zend Framework
Estrutura de arquivos do SNEP
Bootstrapping & Configuração
MVC & Forms
Bibliotecas de Apoio
Histórico - Snep Projeto inicialmente escrito por Flávio Somensi, em PHP puro. Este modelo foi mantido até a versão  1.2.2 .
A partir da versão  1.3.0  o ambiente Zend foi introduzido gradualmente no projeto.
A série  1.3.x  convive com dois ambientes, o legado PHP e a nova estrutura Zend.
A série  1.4  foi totalmente reescrita utilizando o Zend Framework.
ZF – Introdução Zend Framework é um conjunto de classes criadas com base em padrões de desenho de software.
Visa a padronização e a reutilização de código.
É um padrão da indústria.
Possui parceiros tecnológicos como: IBM, Google e Microsoft.
Licença New BSD.
Versão estável: 1.11.3
Estrutura de Arquivos /var/www/snep/ 1.1  |-- Bootstrap.php 1.2  |-- application.ini  5.   |-- default `-- forms ( Forms ) 2.   |-- lib ( Models ) `-- modules     `-- default        |-- actions 3.   |-- controllers ( Controllers )        |-- info.xml        |-- resources.xml 4.       ` -- views ( View) | -- layouts
`-- scripts
Zend_Application Responsável por carregar o ambiente PHP, incluindo os include_paths e autoloading, além de iniciar a classe Bootstrap (responsável pelo cadastro de recursos utilizados no sistema).
A configuração da estrutura do projeto é realizada no arquivo  application.ini , e a interna do SNEP em  /includes/setup.conf .
Ao final, o Zend_Application despacha a requisição para o Front Controller através do método run().
Diagrama de Sequência do Bootstrap
Application.ini Arquivo de configuração utilizado para definir os caminhos, informações padrões, habilitar flags, etc.
[production] resources.frontController.params.displayExceptions = 1 resources.frontController.controllerDirectory = APPLICATION_PATH &quot;/modules/default/controllers&quot; resources.frontController.moduleDirectory = APPLICATION_PATH &quot;/modules&quot; resources.layout.layoutPath = APPLICATION_PATH &quot;/modules/default/views/layouts&quot;
/includes/setup.conf Arquivo de configuração do SNEP.
Pode ser lido pelo Zend_Registry::( 'config' )
O arquivo é lido com  Zend_Config_Ini  e armazenado no Registry. $config  = Zend_Registry::get( 'config' ); echo   $config -> system -> path -> base

Estrutura do Projeto

  • 1.
    Estrutura do Projeto:Amim Knabben < [email_address] > Rafael Bozzetti <rafael@thesource.com.br>
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
    Histórico - SnepProjeto inicialmente escrito por Flávio Somensi, em PHP puro. Este modelo foi mantido até a versão 1.2.2 .
  • 9.
    A partir daversão 1.3.0 o ambiente Zend foi introduzido gradualmente no projeto.
  • 10.
    A série 1.3.x convive com dois ambientes, o legado PHP e a nova estrutura Zend.
  • 11.
    A série 1.4 foi totalmente reescrita utilizando o Zend Framework.
  • 12.
    ZF – IntroduçãoZend Framework é um conjunto de classes criadas com base em padrões de desenho de software.
  • 13.
    Visa a padronizaçãoe a reutilização de código.
  • 14.
    É um padrãoda indústria.
  • 15.
    Possui parceiros tecnológicoscomo: IBM, Google e Microsoft.
  • 16.
  • 17.
  • 18.
    Estrutura de Arquivos/var/www/snep/ 1.1 |-- Bootstrap.php 1.2 |-- application.ini 5. |-- default `-- forms ( Forms ) 2. |-- lib ( Models ) `-- modules    `-- default       |-- actions 3. |-- controllers ( Controllers )       |-- info.xml       |-- resources.xml 4.    ` -- views ( View) | -- layouts
  • 19.
  • 20.
    Zend_Application Responsável porcarregar o ambiente PHP, incluindo os include_paths e autoloading, além de iniciar a classe Bootstrap (responsável pelo cadastro de recursos utilizados no sistema).
  • 21.
    A configuração daestrutura do projeto é realizada no arquivo application.ini , e a interna do SNEP em /includes/setup.conf .
  • 22.
    Ao final, oZend_Application despacha a requisição para o Front Controller através do método run().
  • 23.
  • 24.
    Application.ini Arquivo deconfiguração utilizado para definir os caminhos, informações padrões, habilitar flags, etc.
  • 25.
    [production] resources.frontController.params.displayExceptions =1 resources.frontController.controllerDirectory = APPLICATION_PATH &quot;/modules/default/controllers&quot; resources.frontController.moduleDirectory = APPLICATION_PATH &quot;/modules&quot; resources.layout.layoutPath = APPLICATION_PATH &quot;/modules/default/views/layouts&quot;
  • 26.
    /includes/setup.conf Arquivo deconfiguração do SNEP.
  • 27.
    Pode ser lidopelo Zend_Registry::( 'config' )
  • 28.
    O arquivo élido com Zend_Config_Ini e armazenado no Registry. $config = Zend_Registry::get( 'config' ); echo $config -> system -> path -> base
  • 29.
    Padrão - MVCO MVC (Model, View, Controller) se tornou um padrão comum no desenho de aplicações web modernas.
  • 30.
    Divide de formaorganizada as categorias de: Apresentação, Lógica de Negócio e Acesso de Dados do projeto.
  • 31.
    Bibliotecas e ModelsNa pasta /lib encontramos as bibliotecas, e Models do SNEP.
  • 32.
    Atualmente utilizamos abiblioteca PHP-AGI juntamente com uma camada de abstração para facilitar o acesso do Zend a mesma.
  • 33.
    Models Em /lib/Snep temos as classes Models do projeto .
  • 34.
    São classes quemanipulam as entidades através de rotinas para acesso aos dados e alguma lógica de negócio. /lib/Snep/ /lib/PBX/ /lib/Zend Acl.php Trunks.php Auth.php Alerts.php Interfaces.php Auth/Result.php Billing/Manager.php Rule.php Db.php Carrier/Manager.php Rule/Action.php Db/Select.php ... ... ...
  • 35.
    Zend_Db Zend_Db forneceuma interface simples para as tabelas do banco de dados SQL.
  • 36.
    O SNEP mantêmuma instância da classe Zend_Db no Zend_Registry, permitindo que seja recuperada e utilizada em qualquer ponto da aplicação.
  • 37.
    Permite que qualquertipo de consulta ou manipulação do banco de dados seja feita utilizando o padrão de desenho Table Data Gateway .
  • 38.
    Zend_Db // Instânciado registro db $db = Zend_Registry::get( “db” ); $select = $db ->select() ->from( “peers” ) ->where( “name != 'admin'” ) ->order( “id” ); $stmt = $db ->query( $select ); $resultado = $stmt ->fetchAll( );
  • 39.
    Banco de Dados- MySQL A estrutura e dados do banco do SNEP encontram-se na pasta default/installer/ schema.sql – Contém a estrutura das tabelas.
  • 40.
    system_data.sql –Contém os dados iniciais do banco.
  • 41.
    cnl_data.sql –Contém os dados de localização de chamadas.
  • 42.
    Banco de Dados- Updates As atualizações do banco são versionadas e encontram-se na pasta install/update/ .
  • 43.
    A atualização dobanco de dados deve ser gradual, versão a versão. install/update/ ├── 1.1.0 │   └── database.sql ├── 1.1.3 │   └── database.sql ├── 1.1.6 │   └── database.sql ├── 1.2.0 │   └── database.sql ├── 1.3.0 │   └── database.sql ├── 1.3.1 │   └── database.sql └── 1.3.2 └── database.sql
  • 44.
    Controllers Na pasta controllers são definidas as classes que representam as rotinas de regras de negócio da aplicação.
  • 45.
    Uma classe decontrolador deve estender a classe Zend_Controller_Action .
  • 46.
    O método indexAction() é necessário sendo este a ação padrão do Zend.
  • 47.
    Cada método teráa uma ou mais Views .
  • 48.
    Um controlador eseus métodos definem as URL's da aplicação.
  • 49.
    Controllers // Definiçãode uma classe de controlador // Deve informar o módulo e ter um nome class Agents Controller extends Zend_Controller_Action { // Métodos de ação da Classe public function index Action() { } public function add Action() { } public function remove Action() { } public function edit Action() { } }
  • 50.
    Controllers A estruturado Controlador e seus métodos definem a URL da aplicação. $base_url = http://localhost/snep/index.php/ agents / index / indexAction() agents / add / addAction() agents / remove / removeAction() agents / edit / editAction()
  • 51.
    Views As visõessão a interface com o usuário.
  • 52.
    No Snep utilizamos PHP , HTML e Javascript .
  • 53.
    São divididas empastas com o nome do controlador e um arquivo de template .phtml para cada método.
  • 54.
  • 55.
  • 56.
    Forms A pastaforms deve conter todos os formulários.
  • 57.
    Cada form é definido em XML seguindo um padrão.
  • 58.
    Define tipo evalidação do elementos do formulário. $xml = new Zend_Config_Xml( &quot;./default/forms/example.xml&quot; )
  • 59.
    $form = new Snep_Form( $xml );
  • 60.
    $this -> view-> form = $form ;
  • 61.
    Forms <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> <form> <elements> <nome> <type>text</type> <options> <label> Nome </label> <required> true </required> </options> </nome> <id> <type> hidden </type> </id> </elements> </form>
  • 62.
    Forms Um objetodo tipo Snep_Form possui diversos métodos herdados de Zend_Form .
  • 63.
    O método isValid () é responsável por validar os dados do formulário.
  • 64.
    $isValid = $form -> isValid ( $_POST ); if ( $isValid ) { echo “Form Válido!” ; } else { echo “Form Inválido!” ; }
  • 65.
    Zend_Registry O Zend_Registryé um recipiente onde objetos são armazenados. Permitindo que estes objetos estejam disponíveis em toda aplicação.
  • 66.
    Esse mecanismo substituio uso de variáveis globais. register_globals = Off. // Armazenando um objeto no Zend_Registry Zend_Registry::set( 'index' , $value ); // Armazenando um objeto no Zend_Registry $value = Zend_Registry::get( 'index' );
  • 67.
    Zend_Translate A versão1.4 do SNEP conta com suporte a internacionalização.
  • 68.
    Toda e qualquerstring deve ser definida com Zend_Translate(), desta forma ela torna-se dinâmica.
  • 69.
    Como o Zend_Translateé um atributo da View, seu uso é diferente na Visão, Controlador e Modelo.
  • 70.
    Zend_Translate // Usona Visão echo $this ->translate( “Texto” ); // Uso no Controlador echo $this -> view ->translate( “Texto” ); // No Model deve-se recuperar a instancia. $i18n = Zend_Registry::get( 'i18n' ); $i18n ->translate( “Texto” );
  • 71.