Implementando servidor de aplicações PHP utilizando Zend Framework

Esse mega artigo aborda todos os conceitos técnicos e práticos para a implementação de um servidor de aplicações PHP utilizando framework Zend, incluindo detecção de intrusão e entre outros conceitos. Vale a pena conferir.

[ Hits: 133.956 ]

Por: José Cleydson Ferreira da Silva em 27/04/2010


Padrões de diretórios para aplicações do Zend Framework



É importante seguir um padrão de diretórios que possa se encaixar dentro de um padrão que por sua vez, é determinado pela equipe de desenvolvimento, e neste caso especifico Zend Framework segue o padrão MVC (Model View Controller).

Esse padrão pode ser ilustrado na figura abaixo a seguir. Esse padrão é orientado para separar a lógica da aplicação da lógica de exibição, dessa forma evita-se que o usuário não tenha acesso a camada de controle diretamente.
Cada aplicação a ser desenvolvida possuirá diretórios públicos, que poderão estar acessíveis aos clientes e diretórios que serão usados para fazer a persistência e controle de fluxo. Portanto o padrão de diretórios se dará da seguinte forma: 1. application - configs - controllers - models - views 2. library 3. public 4. testes Como percebemos, o diretório application é responsável por garantir todo o fluxo de controle da aplicação, nele contém os subdiretórios que validam o conceito de camadas do padrão MVC. Abaixo faremos um rápido comentário a respeito desse diretórios e a função que cada um desempenha para o pleno funcionamento da aplicação que está sendo desenvolvida.

Config

O diretório configs é responsável por configurar a aplicação em desenvolvimento, essas configurações implicam em gerenciar as aplicações em desenvolvimento, testes e produção. As diretivas de configuração desse arquivo podem ser relativas a exibição de erros da aplicação, estas são aplicadas em todos os contextos, bem como, a diretiva [development : production] , [testing : production] e [staging : production].

O arquivo <application/configs/aplication.ini> foi idealizado para que se defina os todos os parâmetros de inicialização do aplicativo Zend, do próprio PHP ou outros módulos do PHP. Por exemplo, o Zend Tools, aquele aplicativo para gerar a estrutura dos novos aplicativos Zend, define os parâmetros para mostrar ou não as mensagens de falhas do PHP, o caminho da biblioteca Zend a ser utilizada, o nome da classe Bootstrap (motor de arranque) do aplicativo e o caminho de onde estariam os arquivos com as classes dos controles do aplicativo, todos necessários na inicialização.

É comum colocar neste arquivo também informações de conexões com base de dados, por exemplo, como o nome da base de dados e a senha. Claro que seria possível definir todos esses parâmetros em <public/index.php> e em <application/Bootstrap.php>, ou em outros arquivos, mas o <application/configs/aplication.ini> facilita o manuseio desse parâmetros de inicialização, melhorando a manutenção.

Funciona assim: o arquivo <public/index.php> inicia o aplicativo Zend através de um objeto <Zend_Application>, passando como parâmetro o nome do arquivo de inicialização para esse objeto, que no caso é o próprio <application/configs/aplication.ini>.

A partir daí, o objeto <Zend_Application> executa as funções necessárias para configurar o aplicativo de acordo como o que foi escrito no arquivo <ini>.Você pode pegar mais detalhes em <http://framework.zend.com/manual/en/zend.application.quick-start.html>.

(Néliton Antônio Campus)

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

Controllers

Esse diretório é responsável por por receber a todas as requisições do usuário, como sugere o nome, ele faz o controle do fluxo da aplicação se a necessidade é direcionar para o diretório view ou fazer a persistência no diretório models. Esse fluxo é orquestrado pelos arquivos que nele estiverem, geralmente por padrão sugere-se colocar a palavra controler em cada arquivo, por exemplo: - IndexControler.php.

Models

Sempre que há necessidade de buscar dados ou informações em uma base de dados ou adicionar um registro a camada de modelo que por sua vez faz a persistência de para completar o fluxo de requisição e envio de dados. Podendo direcionar novamente para o controle ou para a view.

View

Esse diretório é responsável por renderizar a página que será exibida ao usuário.

Bootstrap.php

O arquivo bootstap.php fica na raiz do diretório application, sendo ele responsável por configurar toda a aplicação. A configuração do bootstrap.php deve ser planejada com esmero, pois nele pode fazer as seguintes configurações:
  • Controle "motor de arranque" do aplicativo.
  • Inicia autocarregamento de classes.
  • Configura e inicia o autocarregamento de classes.
  • Inicia o modelo de tela pelo método MVC.
  • Inicia a base de dados.
  • Inicia a base de dados do aplicativo com o usuario de menor privilégio.
  • Inicializa o menu.
  • Obtém a referência da visão.

* Exemplo de configuração do bootstrap.php
* autor: Néliton Antônio Campos
* primeira versão: 31 dez 2009

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {

   /**
   * Inicia autocarregamento de classes.
   */

   protected function _initAutoLoader() {

      /**
      * Configura e inicia o autocarregamento de classes.
      */

      $autoLoader = new Zend_Application_Module_Autoloader(
         array('namespace' => '',
            'basePath' => APPLICATION_PATH));

   }

   /**
   * Inicia o modelo de tela pelo método MVC.
   */

   protected function _initLayout() {
      $configs = array(
         'layout' => 'layout0',
         'layoutPath' => APPLICATION_PATH . '/layouts/scripts'
         );
      Zend_Layout::startMvc($configs);
   }

   /**
   * Inicia a base de dados.
   */

   protected function _initDb() {

      /**
      * Inicia a base de dados do aplicativo com o usuario de menor privilégio.
      */

      $database = array(
         'host' => 'localhost',
         'username' => 'usuario',
         'password' => '',
         'dbname' => 'base_de_dados',
         'charset' => 'latin1'
         );
      $db = Zend_Db::factory('Pdo_Mysql', $database);
      Zend_Db_Table::setDefaultAdapter($db);
      Zend_Registry::set('Zend_Db', $db);

   }

Página anterior     Próxima página

Páginas do artigo
   1. Índice
   2. Introdução
   3. Sobre Zend Framework
   4. Particionamento
   5. Instalação do Servidor Web
   6. Habilitando o módulo mod_rewrite
   7. Habilitando o módulo mod_userdir
   8. Instalando Zend Framework
   9. Testando Zend Framework
   10. Padrões de diretórios para aplicações do Zend Framework
   11. Script para a criar a estrutura de diretório do MVC
   12. Configurando restrição de acesso
   13. Configurando Virtual Host
   14. Padronizando o formato dos registros em arquivos de log
   15. Suporte a conexões seguras com SSL
   16. Configurando exibição de erros
   17. Liberando acesso a ftp
   18. Rotinas de backup
   19. Ferramenta para detecção de intrusão (opcional)
   20. Acelerando o PHP (opcional)
   21. Considerações finais
Outros artigos deste autor

Elaborando vídeo-aula no Linux com Gtk-recordMydesktop

Implementando servidor web Java com Tomcat no Linux

O comando LS de A a Z

Os novos plugins do Compiz

Cadê o cubo?

Leitura recomendada

Terminal de acesso (Quiosque) com Debian e Firefox

Controlando projetos com o Subversion

O papel social do software livre

Kingfisher Quota Manager - Instalação e configuração

Testando o Librix da Itautec

  
Comentários
[1] Comentário enviado por viniciusgnu em 27/04/2010 - 08:47h

Meu velho, como sempre está de parabéns! "Keep up with the good work"!
Abraço

[2] Comentário enviado por cleysinhonv em 27/04/2010 - 08:50h

Valeu Vinicius!

Como sempre "procurar" / "tentar" / "me esforçar" em publicar artigos completos que ajudem a comunidade como um todo!

[3] Comentário enviado por uberalles em 27/04/2010 - 11:00h

Que "putza" app server bacana!! Muito bem detalhado seu artigo e passo a passo.

[4] Comentário enviado por cleysinhonv em 27/04/2010 - 11:33h

Olá Andre Miguel,

Bacana né! Procurei Explicar de forma clara e detalhar o máximo possível! Acredito que este material irá ajudar muitas empresas e pessoas que queiram implemetar esse tipo de solução!

Um abraço!

[5] Comentário enviado por valterrezendeeng em 27/04/2010 - 13:04h

Muito Bom o Artigo
Bem Feito e completo

Parabéns !!!!


Abraço

[6] Comentário enviado por razgriz em 27/04/2010 - 13:10h

Belo artigo Kurumin, continue assim!

[7] Comentário enviado por cleysinhonv em 27/04/2010 - 13:16h

Olá valter! Olá Prof. RazGriz!

Obrigado! Fico grato e com sentimento de dever cumprido. Espero que esse artigo possa ajuda-los de alguma forma, utilize-o e indique-o a quem precisar!

Um abraço!


Contribuir com comentário