Estrutura do Projeto

2,210 views
2,178 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,210
On SlideShare
0
From Embeds
0
Number of Embeds
881
Actions
Shares
0
Downloads
40
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Estrutura do Projeto

  1. 1. Estrutura do Projeto: Amim Knabben < [email_address] > Rafael Bozzetti <rafael@thesource.com.br>
  2. 2. Tópicos <ul><li>Histórico do Snep
  3. 3. Zend Framework
  4. 4. Estrutura de arquivos do SNEP
  5. 5. Bootstrapping & Configuração
  6. 6. MVC & Forms
  7. 7. Bibliotecas de Apoio </li></ul>
  8. 8. Histórico - Snep <ul><li>Projeto inicialmente escrito por Flávio Somensi, em PHP puro. Este modelo foi mantido até a versão 1.2.2 .
  9. 9. A partir da versão 1.3.0 o ambiente Zend foi introduzido gradualmente no projeto.
  10. 10. A série 1.3.x convive com dois ambientes, o legado PHP e a nova estrutura Zend.
  11. 11. A série 1.4 foi totalmente reescrita utilizando o Zend Framework. </li></ul>
  12. 12. ZF – Introdução <ul><li>Zend Framework é um conjunto de classes criadas com base em padrões de desenho de software.
  13. 13. Visa a padronização e a reutilização de código.
  14. 14. É um padrão da indústria.
  15. 15. Possui parceiros tecnológicos como: IBM, Google e Microsoft.
  16. 16. Licença New BSD.
  17. 17. Versão estável: 1.11.3 </li></ul>
  18. 18. Estrutura de Arquivos <ul>/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) <ul><ul><ul><ul><li>| -- layouts
  19. 19. `-- scripts </li></ul></ul></ul></ul></ul>
  20. 20. Zend_Application <ul><li>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).
  21. 21. A configuração da estrutura do projeto é realizada no arquivo application.ini , e a interna do SNEP em /includes/setup.conf .
  22. 22. Ao final, o Zend_Application despacha a requisição para o Front Controller através do método run(). </li></ul>
  23. 23. Diagrama de Sequência do Bootstrap
  24. 24. Application.ini <ul><li>Arquivo de configuração utilizado para definir os caminhos, informações padrões, habilitar flags, etc.
  25. 25. [production] </li></ul>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. 26. /includes/setup.conf <ul><li>Arquivo de configuração do SNEP.
  27. 27. Pode ser lido pelo Zend_Registry::( 'config' )
  28. 28. O arquivo é lido com Zend_Config_Ini e armazenado no Registry. </li></ul>$config = Zend_Registry::get( 'config' ); echo $config -> system -> path -> base
  29. 29. Padrão - MVC <ul><li>O MVC (Model, View, Controller) se tornou um padrão comum no desenho de aplicações web modernas.
  30. 30. Divide de forma organizada as categorias de: Apresentação, Lógica de Negócio e Acesso de Dados do projeto. </li></ul>
  31. 31. Bibliotecas e Models <ul><li>Na pasta /lib encontramos as bibliotecas, e Models do SNEP.
  32. 32. Atualmente utilizamos a biblioteca PHP-AGI juntamente com uma camada de abstração para facilitar o acesso do Zend a mesma. </li></ul>
  33. 33. Models <ul><li>Em / lib/Snep temos as classes Models do projeto .
  34. 34. São classes que manipulam as entidades através de rotinas para acesso aos dados e alguma lógica de negócio. </li></ul>/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. 35. Zend_Db <ul><li>Zend_Db fornece uma interface simples para as tabelas do banco de dados SQL.
  36. 36. O SNEP mantêm uma instância da classe Zend_Db no Zend_Registry, permitindo que seja recuperada e utilizada em qualquer ponto da aplicação.
  37. 37. Permite que qualquer tipo de consulta ou manipulação do banco de dados seja feita utilizando o padrão de desenho Table Data Gateway . </li></ul>
  38. 38. Zend_Db // Instância do 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. 39. Banco de Dados - MySQL <ul>A estrutura e dados do banco do SNEP encontram-se na pasta default/installer/ <li>schema.sql – Contém a estrutura das tabelas.
  40. 40. system_data.sql – Contém os dados iniciais do banco.
  41. 41. cnl_data.sql – Contém os dados de localização de chamadas. </li></ul>
  42. 42. Banco de Dados - Updates <ul><li>As atualizações do banco são versionadas e encontram-se na pasta install/update/ .
  43. 43. A atualização do banco de dados deve ser gradual, versão a versão. </li></ul>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. 44. Controllers <ul><li>Na pasta controllers são definidas as classes que representam as rotinas de regras de negócio da aplicação.
  45. 45. Uma classe de controlador deve estender a classe Zend_Controller_Action .
  46. 46. O método indexAction() é necessário sendo este a ação padrão do Zend.
  47. 47. Cada método terá a uma ou mais Views .
  48. 48. Um controlador e seus métodos definem as URL's da aplicação. </li></ul>
  49. 49. Controllers // Definição de 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. 50. Controllers A estrutura do 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. 51. Views <ul><li>As visões são a interface com o usuário.
  52. 52. No Snep utilizamos PHP , HTML e Javascript .
  53. 53. São divididas em pastas com o nome do controlador e um arquivo de template .phtml para cada método.
  54. 54. /modules/default/views/scripts/controller/action.phtml </li></ul>
  55. 55. Views
  56. 56. Forms <ul><li>A pasta forms deve conter todos os formulários.
  57. 57. Cada form é definido em XML seguindo um padrão.
  58. 58. Define tipo e validação do elementos do formulário. $xml = new Zend_Config_Xml( &quot;./default/forms/example.xml&quot; )
  59. 59. $form = new Snep_Form( $xml );
  60. 60. $this -> view -> form = $form ; </li></ul>
  61. 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. 62. Forms <ul><li>Um objeto do tipo Snep_Form possui diversos métodos herdados de Zend_Form .
  63. 63. O método isValid () é responsável por validar os dados do formulário.
  64. 64. $isValid = $form -> isValid ( $_POST ); if ( $isValid ) { echo “Form Válido!” ; } else { echo “Form Inválido!” ; } </li></ul>
  65. 65. Zend_Registry <ul><li>O Zend_Registry é um recipiente onde objetos são armazenados. Permitindo que estes objetos estejam disponíveis em toda aplicação.
  66. 66. Esse mecanismo substitui o uso de variáveis globais. register_globals = Off. </li></ul>// Armazenando um objeto no Zend_Registry Zend_Registry::set( 'index' , $value ); // Armazenando um objeto no Zend_Registry $value = Zend_Registry::get( 'index' );
  67. 67. Zend_Translate <ul><li>A versão 1.4 do SNEP conta com suporte a internacionalização.
  68. 68. Toda e qualquer string deve ser definida com Zend_Translate(), desta forma ela torna-se dinâmica.
  69. 69. Como o Zend_Translate é um atributo da View, seu uso é diferente na Visão, Controlador e Modelo. </li></ul>
  70. 70. Zend_Translate // Uso na 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. 71. Obrigado!

×