# Usando Zend_Tool na Linha de Comando

O CLI, ou ferramenta de linha de comando (internamente conhecida como ferramenta de console), é a principal interface para envio de requisições `Zend_Tool`. Com a ferramenta CLI, desenvolvedores podem emitir requisições para a ferramenta dentro da "janela de linha de comando", também comumente conhecida como uma janela do "terminal". Este ambiente é predominante em um contexto *nix, porem tem uma implementação comum no windows com o `cmd.exe`, console2 e também com o projeto Cygwin.

## Instalação

### Download E Siga

Primeiro faça o download do Zend Framework. Isto pode ser feito indo em framework.zend.com e fazendo download do último release. Depois que você fez o download do pacote e colocou-o no seu sistem. O próximo passo é deixar o comando zf disponível para seu sistema O caminho mais fácil de fazer isso, é copiar os próprios arquivos do diretório bin/ do download, e colocar esses arquivos no mesmo diretório local do binário do cli PHP.

### Instalação Via Pear

Para instalar via PEAR, você deve usar o site de terceiros zfcampus.org para obter o último pacote PEAR do Zend Framework. Estes pacotes são tipicamente construídos dentro de um dia de um release oficial do Zend Framework. O benefício da instalação via gerenciador de pacotes PEAR é que durante o processo de instalação, a biblioteca ZF vai acabar no include_path, e os scripts zf.php e zf scripts irão acabar em um lugar no seu sistema que vai permitir executar-los sem nenhuma configuração adicional.

    pear discover-channel pear.zfcampus.org
    pear install zfcampus/zf

É isto. Depois de instalação inicial, você deve ser capaz de continuar executando o comando zf. Uma boa maneira para ver se está tudo certo é executar o zf --help

### Instalação na Mão

Instalação na mão refere-se ao processo de forçar o zf.php e a biblioteca Zend Framework a trabalhar juntas quando elas são colocadas em lugares não-convencionais, ou pelo menos, em um lugar que seu sistema não pode dispachar facilmente (típico de programas no PATH do seu sistema).

Se você está em um sistema *nix ou mac, você pode também criar um link de algum lugar no seu path para o arquivo zf.sh. Se fizer isso, você não precisa se preocupar em ter a biblioteca Zend Framework no seu include_path, como os arquivos zf.php e zf.sh serão capazes de acessar a biblioteca em relação a onde elas estão (significa que os arquivos no ./bin/ são ../library/ relativos a biblioteca Zend Framework).

Existe um número de outras opções disponíveis para configurar o zf.php e a biblioteca no seu sistema. Essas opções giram em torno da definição de variáveis específicas de ambiente. Estas serão descritas mais tarde na seção "customizando o ambiente CLI". As variáveis de ambiente para configurar o zf.php no include_path, ZF_INCLUDE_PATH e ZF_INCLUDE_PATH_PREPEND, são as mais interessantes.

## Comandos de Propósito General

### Version

Isto mostrará o número da versão corrente da cópia do Zend Framework que a ferramenta zf.php está usando.

    zf show version

### Help Embutido

O sistema de help embutido é o primeiro lugar onde você pode obter informações atualizadas sobre o que o seu sistema é capaz de fazer. O sistema de help é dinâmico pois como os providers são adicionados ao seus sistema, eles são automaticamente executáveis, bem como, os parametros necessários para executar-los estarão na tela de ajuda. O caminho mais fácil de obter a tela de ajuda é o seguinte:

    zf --help

Isto dará a você uma visão geral de várias capacidades do sistema. Algumas vezes, existem mais comandos expecíficos que podem ser executados, e para ter mas informações sobre eles, você pode ter que rodar mais um comando de help especializado. Para um help especializado, simplesmente substitua qualquer um dos elementos do comando por uma "?". Isto dirá ao sistema de help que você quer mais informações sobre que comandos podem ir no lugar da interrogação. Por exemplo:

    zf ? controller

O acima exposto significa "mostre-me todos os 'actions' do provider 'controller'"; enquanto o seguinte:

    zf show ?

significa "mostre-me todos os providers que suportam a action 'show'". Isso funciona para as opções do exemplo a baixo, bem como você pode ver nos exemplos a seguir:

    zf show version.? (mostra todas as especialidades)
    zf show version ? (mostra todas as opções)

### Manifest

Isto irá mostrar o que existe no manifest das ferramentas do sistema. Isso é mais importante para os desenvolvedores de provider do que para usuários casuais das ferramentas do sistema.

    zf show manifest

## Comandos Específicos do Projeto

### Project

O provider project é o primeiro comando que você deve querer rodar. Ele irá configurar a estrutura básica da sua aplicação. Isto é necessário antes de qualquer dos outros providers pode serem executado.

    zf create project MyProjectName

Isso irá criar um projeto em um diretório chamado ./MyProjectName. A partir deste ponto, é importante notar que qualquer dos comandos subseqüentes na linha de comando deve ser executado de dentro do diretório do projeto que você acabou de criar. Assim, após a criação, a mudança de diretório é necessária.

### Module

O provider module permite a fácil criação de um modulo Zend Framework. Um um módulo segue ligeiramente o padrão hMVC. Ao criar módulos, levamos a mesma estrutura usada no nível application/, e duplicamos dentro do nome escolhido para o seu módulo, dentro do diretório "modules" do diretório application/ sem duplicar o diretório de modules em si. Por exemplo:

    zf create module Blog

Isto irá criar um módulo chamado Blog em application/modules/Blog, e todos os artefatos que o módulo irá precisar.

### Controller

O privider controller é responsável por criar (principalmente) controllers vazios bem como seus correspondentes diretórios dos script de view e os arquivos. Para utiliza-lo crie um 'Auth' controlller, por exemplo, execute:

    zf create controller Auth

Isto irá criar um controller chamado Auth, expecificamente criará um arquivo em application/controllers/AuthController.php com AuthController dentro. Se você quiser criar um controller para um módulo, use qualquer dos seguintes comandos:

    zf create controller Post 1 Blog
    zf create controller Post -m Blog
    zf create controller Post --module=Blog

Note: No primeiro comando, 1 é o valor para a flag "includeIndexAction".

### Action

Para criar uma action dentro de um controller existente:

    zf create action login Auth
    zf create action login -c Auth
    zf create action login --controller-name=Auth

### View

Para criar uma view fora do controller/action corrente, você poderia usar um dos seguintess comandos:

    zf create view Auth my-script-name
    zf create view -c Auth -a my-script-name

Isto irá criar um script de view na pasta do controller Auth.

### Model

O provider model é apenas responsável por criar os arquivos de modelo de forma adequada, com o próprio nome dentro da pasta application. Por exemplo

    zf create model User

Se você deseja criar um model dentro de um módulo específico:

    zf create model Post -m Blog

O comando a cima cria um model 'Post' dentro do módulo 'Blog'.

### Form

O provider form é apenas responsável por criar o arquivo e o método init() de forma adequada, com o nome adequado dentro da pasta application. Por exemplo:

    zf create form Auth

Se você deseja criar um model dentro de um módulo expecífico:

    zf create form Comment -m Blog

O comando acima criará o form 'Comment' dentro do módulo 'Blog'.

### DbAdapter

Parar configurar um DbAdapter, você precisará fornecer informações como uma string de url codificada. As strings precisam estar com aspas na linha de comando.

Por exemplo, para digitar as seguintes informações:

- adapter: Pdo_Mysql

- username: test

- password: test

- dbname: test

O seguinte comando terá que ser rodado na linha de comando:

    zf configure dbadapter "adapter=Pdo_Mysql&username=test&password=test&dbname=test"

Isto assume que você deseja armazenar estas informações no espaço de 'production' do arquivo de configuração da aplicação. O comando seguinte irá demonstrar uma configuração para sqlite, na sessão 'development' do arquivo de configuração da aplicação.

    zf configure dbadapter "adapter=Pdo_Sqlite&dbname=../data/test.db" development
    zf configure dbadapter "adapter=Pdo_Sqlite&dbname=../data/test.db" -s development

### DbTable

O provider DbTable é responsável por criar arquivos de modelo `Zend_Db_Table`/dados de acesso para a sua aplicação consumir, com o nome da classe adequada e em local apropriado na aplicação. As duas importantes peças de informação são o nome da DbTable, e o nome da tabela atual banco de dados. Por exemplo:

    zf create dbtable User user
    zf create dbtable User -a user

    // também aceita a opção force para sobreescrever arquivos existentes
    zf create dbtable User user -f
    zf create dbtable User user --force-overwrite

O provider DbTable é também capaz de criar os arquivos apropriadamente mapeando o banco de dados configurado com o provider DbAdapter abaixo.

    zf create dbtable.from-database

Ao executar o acima exposto, pode ser fazer sentido usar primeiro a flag de simulação "-p" para que você possa ver o que seria feito, e que tablelas podem ser encontradas no banco da dados.

    zf -p create dbtable.from-database

### Layout

Atualmente, a única ação suportada para layout é simplesmente permitir-lhes, então configurar apropriadamente o arquivo application.ini para o aplicativo trabalhar, e criar os diretórios e arquivos layout.phtml.

    zf enable layout

## Personalização do Ambiente

### O Storage Directory

O storage directory é importante para que os providers poderem ter um lugar para encontrar a lógica do usuário personalizada gerada que pode mudar a maneira como eles se comportam. Um exemplo pode ser encontrado abaixo é a colocação de um arquivo profile do projeto.

    zf --setup storage-directory

### O Arquivo de Configuração

Isto irá criar o arquivo zf.ini adequado. Este deve ser executado após `zf --setup storage-directory`. Se não for, será localizado dentro do diretório home do usuário. Se for, ele será localizado dentro do storage directory do usuário.

    zf --setup config-file

### Environment Locations

Estes devem ser configurados, se você deseja substituir os locais padrão onde o zf tentará de ler os seus valores.

- ZF_HOME

  - o diretório onde a ferramenta irá procurar um diretório home

  - o diretório deve existir

  - ordem de pesquisa:

    - variável de ambiente ZF_HOME

    - variável de ambiente HOME

    - então a variável de ambiente HOMEPATH

- ZF_STORAGE_DIRECTORY

  - onde esta ferramenta vai procurar por um storage directory

  - o diretório deve existir

  - ordem de pesquisa:

    - variável de ambiente ZF_STORAGE_DIRECTORY

    - diretório $homeDirectory/.zf/

- ZF_CONFIG_FILE

  - onde esta ferramenta vai procurar pelo arquivo de configuração

  - ordem de pesquisa:

    - variável de ambiente ZF_CONFIG_FILE

    - se existir o arquivo $homeDirectory/.zf.ini

    - se existir o arquivo $storageDirectory/zf.ini

- ZEND_TOOL_INCLUDE_PATH

  - configura o include_path para esta ferramenta usar este valor

  - comportamento original:

    - usa o include_path do PHP para procurar o ZF

    - usa a variável de ambiente ZEND_TOOL_INCLUDE_PATH

    - usa o caminho ../library (relativo para zf.php) para procurar o ZF

- ZF_TOOL_INCLUDE_PATH_PREPEND

  - precede o php.ini include_path atual com este valor