[ Tutorial ] Zend Framework Parte 02

MVC, Modules, Controllers, Views, Parameters

Sumário

Nesta parte do tutorial vamos aprender alguns conceitos fundamentais para todo desenvolvedor que utilize o Zend Framework, entre eles o Padrão MVC, Modules, Controllers, Actions, Models, Parameters. Vamos criar um site básico a partir do nosso projeto criado na parte anterior e vamos utilizar os conceitos citados acima.

Agora que você já tem o seu Zend Frameword instalado é hora de se aprofundar em alguns conceitos e entender como as coisas mais fundamentais funcionam.

Padrão de Projeto MVC

O Zend Framework é todo Orientado a Objetos, por isto você precisará ter algum conhecimento básico sobre Orientação a Objetos em PHP. O Zend frameowork utiliza um padrão muito famoso chamado MVC. MVC é a abreviatura para Model-View-Controller.

O MVC permite ao desenvolvedor separar o código em 3 camadas: Apresentação, Lógica de negócio e Acesso aos dados.

As 3 camadas citadas acima são as utilizadas pelo MVC:

M – Model ( Acesso aos dados) – Esta é a parte de sua aplicação que define suas funcionalidades básica atrás de um conjunto de abstrações. Acesso a dados e algums lógicas de negócio podem ser definidas dentro de um model.

V – View ( Apresentação ) – Os Views definem exatamente o que é apresentado ao usuário. Normalmente, os Controllers passam os dados para cada View a fim de exibír estes dados em algum formato. Os Views frequentemente também coletam dados do usuário. É onde você provavelmente encontrará a marcação HTML em sua aplicaçao MVC.

C – Controller ( Lógica de Negócio ) – Os Controllers liga todo o padrão MVC. Eles manipulam os Models, decidem qual view exibir baseado na solicitação do usuário e outros fatores, passam os dados que cada view irá precisar ou repassa o controlle para outro controller.

Module x Model

É importante antecipar aqui a diferença entre Module e Model. Para os falantes do idioma inglês não há muita confusão quanto a estas duas palavras.

Module (módulo) é o que modulariza a aplicação e Model (modelo) o que dá acesso aos dados nas mais diversas formas.

Module não está dentro do MVC mas é utilizado em cada solicitação feita pelo Zend, por isto sua importancia.

Default

Toda aplicação Zend inicia com o Module ‘default’ por padrão.

Veremos mais adiante a estrutura de uma solicitação que explicará melhor.

Estrutura de solicitação: Modules, Controllers, Actions e Parameters

Toda solicitação feita ao Zend Framework possui basicamente 03 (três) elementos.

Module

Parte da aplicação que contem um objetivo distinto e que deve ser utilizado caso você precise controlar várias seções distintas de seu site ou aplicação.

Um exemplo mais básico seria cria um módulo para a Área adminsitrativa do site e utiizar o module Default para o site per si.

Com mais experiência você descobrirá várias formas de utilizar a estrutura de Modules do Zend, mas por hora, a explicação acima basta.

O module default não precisa ser chamado, pois o Zend o carrega automaticamente. Caso você crie um novo Module, você precisará criar uma pasta para o default.

Na pratica já veremos como criar um módulo e você entenderá melhor.

Controller

O controller inicial de qualquer aplicação zend é o ‘index’. O controller index não precisa ser chamado, pois o Zend o carrega automaticamente quando nenhum for passado.

Cada controller possui uma classe exclusiva e única que é extendida da classe abstrata Zend_Controller_Action que é implementada a partir de Zend_Controller_Action_Interface.

Ai você deve estar se perguntando: “Não entendi, Controller que é extendido de uma classe Zend_Controller_Action?

Pois é, o interessante é que na verdade, o mais importante é a camada de apresentação numa aplicação, pois é nela que o usuário interage com o controller, por isto, e pelo fato do controller controlar primariamente actions que vão conter acesso a tudo o que existe no Zend e no MVC per si, a estrutura de arquivos é carregada a partir dos actions e não dos controllers em si. Os controllers apenas fazem isto: controlam a lógica de negócio e acesso a dados presentes nos actions.

Action

O action inicial de qualquer aplicação zend é o ‘index’. O action index não precisa ser chamado, pois o Zend o carrega automaticamente quando nenhum for passado.

Relação MVC e Solicitação com Module/Controller/Action.

Na parte anterior desta sequencia de tutoriais você criou o projeto e testou a partir do url:


http://zend.localhost

Por trás dos panos o Zend na verdade executou isto:


http://zend.localhost/default/index/index

O que seria o mesmo que:


http://zend.localhost/MODULE/CONTROLLER/ACTION

O MODULE não faz nada se não houver mais do que o módulo default e não fará nada mais do que selecionar a estrutura de arquivos que deverá estar dentro da pasta /modules/NOME_DO_MODULO caso você utilize mais do que o módulo default.

O CONTROLLER tem relação direta com o Controller do MVC e carrega o arquivo que contém o controller em questão que deverá estar dentro da pasta /application/controllers, caso não seja utilizado módulo e dentro de /application/modules/NOME_DO_MODULO/controllers, caso esteja utilizando mais do que um módulo.

O ACTION tem relação direta com o View do MVC e carregará o arquivo do controller anterior que contém os Actions dentro.

Parameters

Este é o item que todos se questionam mais cedo ou mais tarde começam a utilizar o tradicional $_GET e se questionam porque o URL tá ficando cheio de &&&& e nem um pouco amigável.

Bom, vão existir casos em que você precisará utilziar $_GET no seu projeto, mas na maioria das situações, não há necessidade.

O Zend utiliza um padrão onde depois de ter encontrado o Module( caso não seja o default), o Controller e o Action ele considerará cada / como um parametro e a próxima / como o valor para este parametro. Exemplo:


http://zend.localhost/module/controller/action/PARAMETRO1/VALOR1/PARAMETRO2/VALOR2

Logo, se você quisesse passar a Categoria ‘carros’ e a Marca ‘chevrolet’, ficaria assim:


http://zend.localhost/module/controller/action/categoria/carros/marca/chevrolet

Legal, não é?

Você vai aprender como pegar estes valores na parte onde tratamos GET e POST.

Por ora basta saber isto, entretanto é importante citar aqui que se você utilizar o controller ou action index e deseja obter parametros do URL, você precisará informar no URL, index/index/ caso contrário, o Zend vai entender que o parametro é o nome do controller e por isto não encontrará e mostrará uma mensagem de erro.

Criando um Site Básico

Durante todo o curso de nosso tutorial vamos trabalhar em cima de um projeto e o mesmo será um site básico sem atrativos visuais, mas que demonstrará todo o potencial do Zend.

Nosso site terá dois módulos:

default – onde residirá todo o código de nosso site acessível pelo usuário final do site.

admin – onde residirá toda o código da área administrativa do site.

Criando os Modules

Vamos trabalhar com módulos pois migrar módulos no zend é muito importante, entretanto, por considerarmos utilizamos o ZF Tool, a abordagem tradicional que você encontra na maioria dos tutoriais por ai pode lhe desanimar, e por isto eu já vou antecipar a solução de seus problemas trabalhando com módulos desde já, a fim de deixá-lo capacitado para criar grandes projetos.

Considero que você tem o ZF Tools funcionando perfeitamente, caso não tenha, veja o post anterior a este e configure-o.

Através do terminal do windows, acesse a pasta do projeto:

 lang="sql
 C:/CAMINHO/PARA/SEU/Apache/htdocs/www/tutorial-zend
 

E digite o comando:

 lang="sql
 zf create module default
 

e faça o mesmo para o módulo admin

 lang="sql
 zf create module admin
 

Verifique que dentro de ‘application’ foi criado uma pasta ‘modules’. Abra esta pasta e verifique que foram criados outras pastas ‘default’ e ‘admin’, ambas contendo sua própria estrutura. Note na imagem abaixo que as pastas ‘controllers’ e ‘views’, criadas no post anterior, ainda estão no mesmo lugar de antes.

Modules

Na primeira parte de nosso tutorial nós criamos o projeto e ele automaticamente criou a pasta /controllers e /views.

NOTA: Se você acessar o URL do projeto agora http://zend.localhost você verá um erro.

Corrigindo o IndexController.php e ErrorController.php

Você precisará recrir os controladores Index e Error a fim da aplicação funcionar a partir de agora.

A lógica para criar um controller é a seguinte:

 lang="plain
 zf create controller NOME_DO_CONTROLLER 1 NOME_DO_MODULE
 

NOTAA linha de comando acima é bem intuitiva, entretando o valor booleano “1” ficou deslocado. Ele significa que queremos criar a estrutura de arquivos views

Como vamos Utilizar uma estrutura modular e criar os comandos através do ZF Tool, cada controller criado dentro do Module irá prefixar a class do controller com Default_.

Isto acontece porque como vários módulos podem ter controladores com o mesmo nome, esta distinção permitirá que o zend carregue o arquivo correto.

Com o ZF Tool aberto digite:

 lang="plain
zf create controller index 1 default
 

e

 lang="plain
   zf create controller error 1 default
   

Isto criará os arquivos IndexController e ErrorController já com suporte à módulos.
Deixe o módulo ‘admin’ como está. O objetivo dele por enquanto é meramente ilustrativo, mais adiante veremos como manipulá-lo.

Modifique o conteúdo do arquivo Error Controller para:


class Default_ErrorController extends Zend_Controller_Action
{
    public function init() {}
	
    public function errorAction()
    {    
        $errors = $this->_getParam('error_handler');

        if (!$errors) {
            $this->view->message = 'You have reached the error page';
            return;
        }

        switch ($errors->type) {
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
                // 404 error -- controller or action not found
                $this->getResponse()->setHttpResponseCode(404);
                $priority = Zend_Log::NOTICE;
                $this->view->message = 'Page not found';
                break;
            default:
                // application error
                $this->getResponse()->setHttpResponseCode(500);
                $priority = Zend_Log::CRIT;
                $this->view->message = 'Application error';
                break;
        }

        // Log exception, if logger available
        if ($log = $this->getLog()) {
            $log->log($this->view->message, $priority, $errors->exception);
            $log->log('Request Parameters', $priority, $request->getParams());
        }

        // conditionally display exceptions
        if ($this->getInvokeArg('displayExceptions') == true) {
            $this->view->exception = $errors->exception;
        }

        $this->view->request   = $errors->request;
    }

    public function getLog()
    {
        $bootstrap = $this->getInvokeArg('bootstrap');
        if (!$bootstrap->hasResource('Log')) {
            return false;
        }
        $log = $bootstrap->getResource('Log');
        return $log;
    }
}
	

E crie o Action “error” para o controller Error:

 lang="plain
zf create action error Error 1 default

Mais abaixo você tem uma explicação melhor sobre estes comandos.

Abra o arquivo gerado /modules/default/views/scripts/error/error.phtml e insira o conteudo abaixo:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>Zend Framework Default Application</title>
</head>
<body>
  <h1>An error occurred</h1>
  <h2><?php echo $this->message ?></h2>

  <?php if (isset($this->exception)): ?>

  <h3>Exception information:</h3>
  <p>
      <b>Message:</b> <?php echo $this->exception->getMessage() ?>
  </p>

  <h3>Stack trace:</h3>
  <pre><?php echo $this->exception->getTraceAsString() ?>
  </pre>

  <h3>Request Parameters:</h3>
  <pre><?php echo var_export($this->request->getParams(), true) ?>
  </pre>
  <?php endif ?>
</body>
</html>

Digite qualquer coisa errada no seu url do projeto e veja que este arquivo será utilizado.
Então você poderá modificá-lo de acordo com suas necessidades visuais.

IMPORTANTEAPAGUE as pastas /application/controllers e /application/views.

O método init()

Se você já havia analisado anteriormente quando criamos o projeto na primeira parte, você notou que foi gerado automaticamente dentro da Classe IndexController o método init() e o mesmo aconteceu com o ErrorController.
Este método está ai por um motivo muito especial. Todo o código que queremos que seja inicializado em todos os actions da aplicação poderão ser colocados ai, tais como: Configurações globais, Variáveis templae para o View, Chamada para Models, etc. Então o Zend gera ele automaticamente para nós, assim como o indexAction().

Criando os Actions para as Páginas do Site

A lógica para criar um action é a seguinte:

 lang="sql
 zf create action NOME_DO_ACTION NOME_DO_CONTROLLER 1 NOME_DO_MODULE
 

O valor booleano ‘1’ indica que queremos que o ZF Tool crie o arquivo ‘.phtml’.

Como nosso site é um site simples, vamos criar as páginas básicas:

  • Home – que já existe
  • Quem Somos
  • Produtos
  • Serviços
  • Contato

Como vamos criar as páginas e futuramente você vai aprender como criar Routes com o Zend, vamos criá-las a partir do Controller Index, pois por se tratar de um site, toda seção será secundária à Home do site. Caso você fosse criar um Breadcrumb esta lógica faria mais sentido.

Você está aqui: Home

Você está aqui: Home -> Quem Somos

Você está aqui: Home -> Produtos

Você está aqui: Home -> Serviços

Você está aqui: Home -> Contatos

Caso você queira produzir um site com mais subseções, você poderá projetar em cima de outros Controllers, mas por ora, o que vamos aprender basta.

Ainda na pasta do projeto que acessamos anteriormente, digite os comandos para criar as actions.

NOTA: digite ENTER após cada linha abaixo:

 lang="sql
 zf create action quemSomos Index 1 default
 
 lang="sql
 zf create action servicos Index 1 default
 
 lang="sql
 zf create action produtos Index 1 default
 
 lang="sql
 zf create action contato Index 1 default
 

Abra o arquivo /application/modules/default/IndexController.php e veja que foram adicionados métodos correspondendo com os actions que criamos acima.

Justamente por ser o controller Index que irá controlar as ações de nosso site é que eles foram criados dentro deste arquivo.

Para cada action criado, um arquivo /modules/NOME_DIR_DO_MODULO/NOME_DIR_CONTROLLER/NOME_DO_ACTION.phtml é criado.
Os comandos acimas irão gerar a estrutura:

  • /application/modules/views/scripts/index/quem-somos.phtml
  • /application/modules/views/scripts/index/servicos.phtml
  • /application/modules/views/scripts/index/produtos.phtml
  • /application/modules/views/scripts/index/contato.phtml

LEMBRANDO: Preste atenção nos comandos acima, e note que utilizamos “1 default” no final. Fizemos isto para indicar que queremos que o Zend crie NÃO SOMENTE os métodos actions dentro do controller MAS TAMBÉM as pastas e os arquivos dentro do módulo ‘default’.

CURIOSIDADESe você deseja criar nomes de action tal como “quem-somos”, “resultado-busca”, etc. Que são separados por hífen, você deve unir as palavras do nome desejado e Capitalizar cada palavra dentro da string. Este foi o nosso caso, onde utilizamos “quemSomos” para criar o action “quem-somos”.

CURIOSIDADE: Se você não quiser prefixar as classes do módulo default, basta abrir o arquivo /application/config/application.ini e modificar o valor da linha:

 lang="sql
 resources.frontController.params.prefixDefaultModule = "1"
 

para

 lang="sql
   resources.frontController.params.prefixDefaultModule = "0"
   

No entanto, quando você for criar outro controller no módulo default, o ZF Tool irá adicionar o Prefixo e o controlador de erros irá disparar um erro informando que a classe não existe. Então é melhor utilizar o Prefixo.

Testando os actions

Você pode testar agora através dos URL’s:

  • http://zend.localhost/index/index
  • http://zend.localhost/index/quem-somos
  • http://zend.localhost/index/servicos
  • http://zend.localhost/index/produtos
  • http://zend.localhost/index/contato

Note que estamos utilizando ‘index’ em todos os urls. Nós gostaríamos de algo como:

  • http://zend.localhost/home
  • http://zend.localhost/quem-somos
  • http://zend.localhost/servicos
  • http://zend.localhost/produtos
  • http://zend.localhost/contato

Na próxima parte de nosso tutorial, vamos descobrir como fazer isto através de Routes.

Criando um Controller – Sitemap?

Criar um Controller é tão facil quanto criar um action.

A lógica é a seguinte:

 lang="sql
zf create controller NOME_DO_CONTROLLER	1 NOME_DO_MODULE
 

Vamos criar um constroller bem peculiar que futuramente utilizaremos para rastreamento de nosso site.

Após aprender a utilizar Routes iremos criar um arquivo sitemap.xml chamado diretamente pelo URL

http://zend.localhost/sitemap.xml

Para criar o controller digite:

 lang="sql
  zf create controller sitemap 1 default
  

Este comando criará o arquivo /modules/default/controllers/SitemapController.php e o arquivo /modules/default/view/scripts/sitemap/index.phtml.

NOTA Novamente aqui preste atenção em 1 default. Estes parametros tem a mesma função que a vista anteriormente para o Action: “criar as pastas e arquivos”.
Quando criamos um novo controller, por padrão o ZF Tool cria o View para o action ‘index’.
Confira dentro da pasta /application/modules/default/controllers/ que foi criado o arquivo SitemapController.php e foi criado o arquivo /application/modules/default/view/scripts/sitemap/index.phtml.

DICA: Crie outros projetos testes com o ZF Tool e teste a criação de Actions e Controllers.

Conclusão

Nesta parte do tutorial você aprendeu os conceitos mais importantes e fundamentais sobre o Zend Framework. Aprendeu como utilizar o ZF Tool para criar modules, actions e controllers. Nas próximas parte vamos aprender como criar Routes, Layouts, Forms e criar um Model para registrar nossos contatos no banco de dados e vamos aprender a enviar emails com o Zend Framework. Até a próxima.
Abraço do Giba!

28 comentários sobre “[ Tutorial ] Zend Framework Parte 02”

  1. Muito bom estes posts relacionados ao Zend Framework! Eu iniciei um projeto utilizando o ZF recentemente, e estou tendo problemas exatamente com relação a definição dos módulos e a configuração de rotas. Mesmo depois de ter tudo configurado, não consigo fazer o que quero. Poderia adiantar parte do próximo artigo sobre rotas? Parabéns pelo blog.

  2. Seguinte, ao digitar o comando zf create action quemSomos Index 1 default, ocorre a seguinte mensagem:

    note: phpunit is required in order to generate controller test stubs. an error has ocurred
    controller index was not found.

    zend framework command line console tool v1.11.10
    details for actions “create” and provider “action”
    action
    zf create action name controller-name[=Index] VIEW-INCLUDED[=1] module

    porém estou seguindo passo a passo certinho
    tem como soluciona meu problema ?
    desde ja agradeço.

    1. Cada action tem uma view!
      No caso do Controller ‘index’, estão dentro de:
      \application\modules\default\views\scripts\index
      Esqueci de colocar esta parte dos diretórios para os view na seção Relação MVC e Solicitação com Module/Controller/Action.
      Vou atualizar hoje de tarde.
      Obrigado, acabou sendo útil sua observação.

  3. Olá, primeiro gostaria agradecer por este excelente tutorial.
    Estou com uma dúvida.

    Quando tento criar as actions o zend tool me da um erro. Vi que ele da um aviso que o PHPUnit não está instalado. Você poderia me dizer como instalo ele offline. Sei que pode ser pelo pear.

    1. Possivelmente, há um erro no include_path ou você está usando o PHP errado, ou seja, talvez você tenha uma instalação Wamp e configurou no PHP.ini errado ou tinha outro php instalado.
      Verifique o include path do PHP e poshttp://gilbertoalbino.com/wp-admin/edit-comments.php?p=783&approved=1#comments-formta aqui:
      cria o famoso info.php
      < ?php echo phpinfo() ; ?>
      e veja a seção ‘Core’ na linha ‘include_path’

  4. Gilberto, agora q vc esclareceu olhe este meu exemplo:

    Tenho a seguinte aplicação:
    O indexController na indexAction cria um formulário e passa os dados via post para ele mesmo, caso exista algum dado mostra na view index.phtml.

    public function indexAction() {
    //Verifica se foi feito o post
    if ($this->_request->isPost()){
    //pega os dados postados
    $rg = $this->_request->getPost(‘rg’);
    //Query de pesquisa oracle
    AQUI FICA A QUERY
    $stmt = “select * from hell”;
    //Verifica se tem dados para exibir
    $db = Zend_Registry::get(‘db’);
    //Executa a query
    $stmt = $db->query($sql);
    //Manda os dados para a view index.phtml
    $this->view->data = $stmt->fetchAll();
    }
    //cria o formulário de Consulta de RG
    $this->view->form = new ConsultaForm;
    }

    Formulário:
    generate();
    }
    private function generate() {
    //Nome do formulário
    $this->setName(‘Consulta’);
    //Elemento para o campo RG
    $rg = new Zend_Form_Element_Text(‘rg’);
    //Configura o label, diz q é obrigatório, filtro e validador
    $rg->setLabel(‘RG’)->setRequired(true)->addFilter(‘StripTags’)-
    >addValidator(‘NotEmpty’);

    $rg->setAttrib(‘size’,’10’);
    //botão de submit
    $submit = new Zend_Form_Element_Submit(‘submit’);
    $submit->setLabel(‘Consulta’);
    $submit->setAttrib(‘id’, ‘Consulta’);
    //botão de limpar
    $reset = new Zend_Form_Element_Reset(‘limpar’);
    $reset->setLabel(‘Limpar’);
    $reset->setAttrib(‘id’, ‘Limpar’);
    //adicionar os campos ao formulário
    $this->addElements(array($rg,$submit,$reset));
    //action e method
    $this->setAction(BASE_URL.’/index/index’)->setMethod(‘post’);
    }
    }

    Assim está funcionando, mas como terei que adicionar mais funcionalidades resolvi criar mais uma action.
    Alterei o action do formulário para $this->setAction(BASE_URL.’/index/
    index/consulta’)->setMethod(‘post’);
    Na nova action, consultaAction, coloquei as mesmas informações que
    estavam na indexAction e enviei para uma nova view consulta.phtml.
    Depois via redirect volto para a página inicial.
    So que não aparece nada. Fiz o teste sem voltar para a página inicial e tb nada acontece.

    Acho q estou me perdendo em algum conceito.

      1. Quando envio o os dados do formulário para a indexAction via post, faço a consulta e o resultado vai normalmente para a view index.phtml.

        Quando envio o os dados do formulário para a consultaAction via post, faço a consulta e o resultado não aparece na view consulta.phtml.

        1. Hum.
          $this->setAction(BASE_URL.’/index/index/consulta’)…

          O correto seria:
          $this->setAction(BASE_URL.’/index/consulta’)…

          Voce modificou o método consultaAction para ficar igual o indexAction?
          Colocou o conteudo em consulta.phtml igual ao index.phtml

          1. Tem razão Gilberto. Eu estava colocando o primeiro index pensando no módulo default, mas não precisa.

            Mas acompanhe meu raciocínio:
            Aplicação é acessada.
            – A view index.phtml carrega a interface inicial.
            – Faço a consulta pela actionConsulta e a view consulta.phtml exibe o resultado e AINDA tem que carregar a interface inicial novamente.

            Quer dizer, toda action que eu fizer vai ter q renderizar toda a interface inicial. Não teria um modo de evitar esta repetição de código?

            Desde já agradeço a paciência que vc está tendo Gilberto.

          2. Sim, layout.
            Digite
            zf enable layout

            Isto criará a pasta \application\layouts\scripts e dentro dela o arquivo layout.phtml.

            Esta sequencia de tutorial pretende ter 35 partes.
            Imagina que tem muita coisa pela frente heim?

          3. Claro!!!!

            Já uso layputs, mas algum motivo achava que só podia colocar coisas estáticas ali. Fiz um teste agora criando um objeto do tipo formulário, dei um “echo” e funcionou!

            Meu velho, vou acompanhar todas estas 35 partes.
            Falta muito coisa mesmo: ACL, cache, Zend_DB…

          4. Sim.
            Fique ligado no fato do layout.phtml ter uma chamada para:
            < ?= $this->layout()->content; ?>
            Este content é o conteudo do arquivo view do action chamado.
            Logo os arquivos view script só precisam do conteudo mesmo.

  5. Olá pessoal,
    Também estou com o mesmo problema do amigo wls.
    Lendo o trecho:

    “Abra o arquivo /application/modules/default/IndexController.php e veja que foram adicionados métodos correspondendo com os actions que criamos acima.”

    Percebi é que não possuo IndexController.php em /application/modules/default/ e sim em /application/modules/default/controllers/
    Não faltou a gente ter criado este arquivo no dir default?

    1. Na primeira parte do tutorial nós criamos o projeto e o arquivo IndexController.php foi criado.
      E na segunda parte nós movemos os arquivos para a pasta do módulo.

      1. Encontrei o furo do zf tool não criar as actions.
        É preciso antes criar o controller com zf tool também:
        zf create controller index 1 default
        e depois sim:
        zf create action quemSomos Index 1 default
        Basta verificar em:
        /application/modules/default/controllers/IndexController.php
        Buenas, acredito ser algum problema relacionado ao .zfproject.xml
        Abraço!

      2. cara, continuo com o mesmo problema de não conseguir executar o comando zf crate action quemSomos Index 1 default, eu fiz todo o procedimento certinho passo a passo mais o infiliz continua com o mesmo erro, poderia me ajudar?

        desde ja agradeço.

        ja tentei fazer 1 monte de coisa mais ainda não conseguir arrumar =/

        1. Bom, a única coisa mais provável é alguma coisa errada na configuração.
          Mas vale lembrar que no windows é obrigatório reiniciar o PC após definir as variáveis de ambiente.
          Se mesmo assim não funcionar verifique os caminhos de instalação.

  6. Giba,

    Parabéns pelo blog e pelos tutorias. Iniciei a primeira parte ontem e comecei a segunda parte hoje.

    Apenas sugiro correções neste artigo:
    – “$request” para “$errors->request” na classe Default_ErrorController.
    – aplicar o “SetEnv APPLICATION_ENV development” no arquivo .htaccess, para alterar o modo do sistema para desenvolvimento, pois a saída do erro é mais detalhado. Lógico que não é aplicável em casos de ambiente de produção.
    – Alterar em “Confira dentro da pasta /application/modules/controllers/” para “Confira dentro da pasta /application/modules/default/controllers/”
    – Alterar em “/application/modules/view/scripts/sitemap/index.phtml” para “/application/modules/default/view/scripts/sitemap/index.phtml”

    Giba, sugiro que você coloque a opção “Doação” no blog, para que nós possamos doar o din-din para você, devido a excelência do tutorial e continuar a série do artigo para chegar até na 35º parte.

    Um grande abraço,
    Vinicius.

    1. Olá, Vinicius.
      Já fiz as correções e obrigado pela doação 😀
      E quanto a classe Default_ErrorController esta seção está totalmente destinada à um conteúdo exclusivo… por isto não modifiquei mais do que o próprio Zend já oferece por padrão.
      A questão do APPLICATION_ENV ficaria mais apropriado para a seção de Tratamento de Erros com Zend…
      Um dos motivos de eu ter estacionado meus tutoriais foram justamente o fato de eu estar passando por graves problemas financeiros.
      Eu sou de Camboriú, SC e o negócio aqui está cada vez ficando mais desvalorizado então, você já deve imaginar… o cara trabalha mais para receber menos.
      Eu recebo emails do Brasil todo a respeito dos tutoriais e o Google está sendo muito gentil comigo em relação ao meu posicionamento…
      sinto não poder continuar como gostaria…
      Já tenho muita coisa pronta mas que não revisei ainda e que por isto não publiquei.
      Abraço e muito obrigado novamente!

  7. Concordo com o comentário do VINICIOS:
    “Giba, sugiro que você coloque a opção “Doação” no blog, para que nós possamos doar o din-din para você, devido a excelência do tutorial e continuar a série do artigo para chegar até na 35º parte.

    Um grande abraço,
    Vinicius.”

    Eu mesmo estarei fazendo minha doação, pois os tutorias são de excelência e está me ajudando muito. Parabéns Giba!

  8. …complementando mensagem anterior, concordo com o Vinicius, seu tutorial é muito útil, estou estudando ele pra entender melhor o mecanismo da loja Magento. Se tiver meios de enviar valores para sua conta bancária nos informe pois aqui no Brasil não tem cursos Zend profissionais, abraços. Marcio

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *