4.2. Zend_Application

Existe dois caminhos para começar a usar o Zend_Application, eles dependem de como você quer iniciar seu projeto. Em cada caso, você sempre inicia com a criação da classe Bootstrap e a configuração do arquivo.

Se você pretende criar um projeto novo usando o Zend_Tool continue lendo abaixo. Se você pretende adicionar um projeto existente ao Zend_Application clique aqui.

4.2.1. Usando o Zend_Tool

A melhor maneira de iniciar seu projeto Zend_Application é usando o Zend_Tool para gerar seu projeto. Ele também cria para você a classe e o arquivo Bootstrap

Para criar o projeto, execute o comando zf (em sistemas unix)

% zf create project newproject

Ou o comando zf.bat para windows:

C:> zf.bat create project newproject

Ambos comandos criam a estrutura do projeto, segue a seguir um exemplo:

newproject
|-- application
|   |-- Bootstrap.php
|   |-- configs
|   |   `-- application.ini
|   |-- controllers
|   |   |-- ErrorController.php
|   |   `-- IndexController.php
|   |-- models
|   `-- views
|       |-- helpers
|       `-- scripts
|           |-- error
|           |   `-- error.phtml
|           `-- index
|               `-- index.phtml
|-- library
|-- public
|   `-- index.php
`-- tests
    |-- application
    |   `-- bootstrap.php
    |-- library
    |   `-- bootstrap.php
    `-- phpunit.xml

No diagrama a cima, seu bootstrap está em newproject/application/Bootstrap.php, primeiramente ele contém apenas isso:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
}

Também é notável a criação de um arquivo de configuração: newproject/application/configs/application.ini. Ele contém o seguinte conteúdo:

[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

Todas as configurações são descritas nesse arquivo para ser usado com Zend_Application e pelo seu bootstrap.

Outro arquivo interessante é o newproject/public/index.php, que invoca e executa o Zend_Application.

// Define path to application directory
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH',
              realpath(dirname(__FILE__) . '/../application'));

// Define application environment
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV',
              (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV')
                                         : 'production'));

/** Zend_Application */
require_once 'Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
            ->run();

Para continuar criando e configurando seu projeto, clique aqui e leia "Criando e Adicionando Recursos

4.2.2. Adicionando o Zend_Application ao seu aplicativo

O básico do Zend_Application é relativamente simples:

  • Crie o arquivo application/Bootstrap.php, com a classe Bootstrap.

  • Crie o arquivo de configuração application/configs/application.ini com base na configuração necessária para o Zend_Application

  • Modifique seu public/index.php para utilizar o Zend_Application.

Primeiramente crie sua classe Bootstrap. Crie o arquivo application/Bootstrap.php, com o seguinte conteúdo:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
}

Agora crie seu arquivo de configuração. Neste tutorial nós vamos usar um arquivo do tipo INI. Você pode, é claro, usar um arquivo de configuração no formato XML ou PHP. Crei o arquivo application/configs/application.ini, e coloque os seguinte conteúdo:

[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

Aora vamos modificar seu script public/index.php. Se o arquivo não existir, crie ele, senão substitua o conteúdo pelo seguinte:

// Define path to application directory
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH',
              realpath(dirname(__FILE__) . '/../application'));

// Define application environment
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV',
              (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV')
                                         : 'production'));

// Typically, you will also want to add your library/ directory
// to the include_path, particularly if it contains your ZF installed
set_include_path(implode(PATH_SEPARATOR, array(
    dirname(dirname(__FILE__)) . '/library',
    get_include_path(),
)));

/** Zend_Application */
require_once 'Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
            ->run();

Você pode notar que o ambiente do aplicativo contém um valor de constantes procurando pela variável de ambiente "APPLICATION_ENV". Nós recomendamos configurar essa variável no seu web server. No Apache, você pode configurar isso na definição do seu virtual host ou no seu arquivo .htaccess. Nós recomendamos o seguinte conteúdo para o seu arquivo public/.htaccess:

SetEnv APPLICATION_ENV development

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
[Note] Leia mais sobre mod_rewrite

As regras rewrite a cima permitem acesso a qualquer arquivo sobe seu document root do virtual host. Se lá contém arquivos que você não quer expor nesse diretório, você pode desejar ser mais restritivo em suas regras.Vá até o website do Apache e tenha maiores informações sobre mod_rewrite

Neste ponto, você já tem tudo pronto para começar a utilizar o Zend_Application

4.2.3. Criando e Adicionando Recursos

Se você seguiu corretamente o tutorial a cima, então sua classe bootstrap vai utilizar o front controller, e quando o Zend_Application for executado, vai ser executado o front controller. Contudo, provávelmente, você vai precisar de mais algumas pequenas configurações do que o existente.

Agora nós vamos procurar adicionar dois recursos no seu aplicativo. O primeiro, será a configuração de layouts e então personalizar seu view object (objeto de visualização).

Um dos recursos padrões fornecidos com o Zend_Application é o recurso de "layout". Este recurso espera que você defina valores de configuração que vão ser utilizados para a configurar a sua instância do Zend_Layout.

Para usa-lo, todos nós precisamos fazer uma pequena alteração no arquivo de configuração.

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
; ADICIONE AS SEGUINTES LINHAS
resources.layout.layout = "layout"
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"

[staging : production]

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

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

Se você não tem, crie o diretório application/layouts/scripts/, e o arquivo layout.phtml dentro desse diretório. Um bom exemplo de como começar o seu layout segue abaixo:

<?php echo $this->doctype() ?>
<html>
<head>
    <?php echo $this->headTitle() ?>
    <?php echo $this->headLink() ?>
    <?php echo $this->headStyle() ?>
    <?php echo $this->headScript() ?>
</head>
<body>
    <?php echo $this->layout()->content ?>
</body>
</html>

Nesse ponto, você já tem um layout funcional.

Agora, nós adicionamos uma personalização no view resource. Quando inicializamos o view nós queremos que o HTML DocType e o valor padrão do título do HTML head. Isso pode ser colocado dentro da sua classe Bootstrap adicionando o método:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initView()
    {
        // Initialize view
        $view = new Zend_View();
        $view->doctype('XHTML1_STRICT');
        $view->headTitle('My First Zend Framework Application');

        // Add it to the ViewRenderer
        $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
            'ViewRenderer'
        );
        $viewRenderer->setView($view);

        // Return it, so that it can be stored by the bootstrap
        return $view;
    }
}

Esse método vai ser automáticamente executado quando o seu aplicativo for iniciado e vai ter certeza que sua view é inicializada de acordo com as necessidades que seu aplicativo precisa.

4.2.4. Próximos passos com Zend_Application

Com o que foi dito acima você criou seu Zend_Application e o seu bootstrap. A partir daqui, você deve começar a criar métodos recursos, ou, para obter o máximo de re-usabilidade, criar classes plugins de recursos. Continue lendo para aprnder mais!