Development

Documentation/pt_BR/book/1.0/04-The-Basics-of-Page-Creation (diff)

You must first sign up to be able to contribute.

Changes between Version 8 and Version 9 of Documentation/pt_BR/book/1.0/04-The-Basics-of-Page-Creation

Show
Ignore:
Author:
HelySousa (IP: 187.36.70.175)
Timestamp:
01/17/10 02:41:12 (7 years ago)
Comment:

Revisão do texto

Legend:

Unmodified
Added
Removed
Modified
  • Documentation/pt_BR/book/1.0/04-The-Basics-of-Page-Creation

    v8 v9  
    11{{{ 
    22#!WikiMarkdown 
    3 Capítulo 4 - O Básico sobre Criação de Paginas 
     3Capítulo 4 - O básico sobre criação de páginas 
    44============================================== 
    55 
    88 
    99 
    10 Este capítulo ensinará você como criar um modulo, que é o elemento estrutural das paginas. Você irá também aprender como criar uma página, que é dividida em ''action'' e ''template'', por causa do padrão MVC. Links e forms são o básico da interação web; você verá como inserir eles em um ''template'' e manipular eles em um ''action''. 
     10Este capítulo ensinará você como criar um modulo, que é o elemento estrutural das páginas. Você irá também aprender como criar uma página, que é dividida em ''action'' e ''template'', por causa do padrão MVC. Links e forms são o básico da interação web; você verá como inserí-los em um ''template'' e manipulá-los em uma ''action''. 
    1111 
    1212Criando um esqueleto do módulo 
    1313------------------------------ 
    1414 
    15 Como o capitulo 2 explicou, symfony agrupa paginas em módulos. Antes de criar uma pagina, voce deve criar um modulo, que é inicialmente uma estrutura de arquivos vazia que o symfony pode reconhecer. 
    16  
    17 A linha de comando do symfony automatiza a criação de módulos. Você pode simplesmente chamar o comando `init-module` como o nome da aplicação e o nome do modulo como argumentos. No capitulo anterior, você criou a aplicação `myapp`. Para adicionar o modulo `mymodule` para essa aplicação, digite os seguintes comandos: 
     15Como explicado no Capítulo 2, symfony agrupa páginas em módulos. Antes de criar uma página, você deve criar um módulo, que é inicialmente uma estrutura vazia de arquivos que o symfony pode reconhecer. 
     16 
     17A linha de comando do symfony automatiza a criação dos módulos. Você pode simplesmente chamar o comando `init-module` com o nome da aplicação e o nome do módulo como argumentos. No capítulo anterior, você criou a aplicação `myapp`. Para adicionar o módulo `mymodule` para essa aplicação, digite os seguintes comandos: 
    1818 
    1919    > cd ~/myproject 
    3434 
    3535 
    36 Excluindo os diretórios `actions/`, `config/`, `lib/`, `templates/`, e `validate/`, este comando criou apenas três arquivos. Um está em na pasta `test/` que relaciona `unit tests`, e você não precisa incomodar-se com ela até o capítulo 15. O arquivo `actions.class.php` (mostrado na listagem 4-1) redireciona para o modulo default ''congratulation page''. O arquivo `templates/indexSuccess.php` esta vazio. 
    37  
    38 Listagem 4-1 - O arquivo default Action gerado, em `actions/actions.class.php` 
     36Excluindo os diretórios `actions/`, `config/`, `lib/`, `templates/`, e `validate/`, este comando criou apenas três arquivos. Um está na pasta `test/` que relaciona `unit tests`, e você não precisará incomodar-se com ela até o Capítulo 15. O arquivo `actions.class.php` (mostrado na listagem 4-1) redireciona para o módulo default ''congratulation page''. O arquivo `templates/indexSuccess.php` está vazio. 
     37 
     38Listagem 4-1 - O arquivo action padrão gerado em `actions/actions.class.php` 
    3939 
    4040    [php] 
    4949    } 
    5050 
    51 >**NOTE** 
    52 >Se você ver o arquivo `actions.class.php` atual, você encontrará mais do que essas poucas linhas, incluindo vários comentários. Isto acontece porque symfony recomenda usar comentários para documentar seu projeto e preparar cada arquivo de classe para ser compatível com ferramentas como phpDocumentor ([http://www.phpdoc.org/](http://www.phpdoc.org/)). 
    53  
    54 Para cada novo modulo, symfony cria um action `index`. Ele é composta de um método chamado `executeIndex` e um template chamado `indexSuccess.php`. A idéia do prefixo `execute` e do sufixo do `Success` serão explicados nos capítulos 6 e 7, respectivamente. Por enquanto, você pode considerar como sendo uma convenção de nomenclatura. Você pode ver a pagina corresponde (como na figura 4-1) colocando em seu brownser a seguinte URL: 
     51>**NOTA** 
     52>Se você ver o arquivo `actions.class.php` atual, você encontrará mais do que essas poucas linhas, incluindo vários comentários. Isto acontece porque o symfony recomenda usar comentários para documentar seu projeto e preparar cada arquivo de classe para ser compatível com ferramentas como phpDocumentor ([http://www.phpdoc.org/](http://www.phpdoc.org/)). 
     53 
     54Para cada novo módulo, symfony cria uma action `index`. Ela é composta de um método chamado `executeIndex` e um template chamado `indexSuccess.php`. A idéia do prefixo `execute` e do sufixo do `Success` serão explicados nos capítulos 6 e 7, respectivamente. Por enquanto, você pode considerar como sendo uma convenção de nomenclatura. Você poderá ver a página correspondente (como na figura 4-1) colocando em seu navegador a seguinte URL: 
    5555 
    5656    http://localhost/myapp_dev.php/mymodule/index 
    5757 
    58  
    59 O action default index não será usada neste capitulo, então você pode remover o metodo `executeIndex()` do arquivo `actions.class.php`, e deletar o arquivo `indexSuccess.php` da pasta `templates/`. 
    60  
    61 >**NOTE** 
    62 >Symfony oferece outras maneiras iniciar um módulo do que a linha de comando. Um deles é criar os diretórios e arquivos você mesmo. Em muitos casos, as actions e os templates de um módulo são pretendidos para manipular dados de uma tabela. Como o código necessário para criar, recuperar, atualizar, e deletar registros de uma tabela é frequentemente o mesmo, symfony fornece um mecanismo chamado scaffolding para gerar este código para você. Consulte o capítulo 14 para mais informação sobre esta técnica. 
     58A action padrão index não será usada neste capítulo, então você pode remover o método `executeIndex()` do arquivo `actions.class.php`, e deletar o arquivo `indexSuccess.php` da pasta `templates/`. 
     59 
     60>**NOTA** 
     61>Symfony oferece outras maneiras iniciar um módulo além da linha de comando. Um deles é criar os diretórios e arquivos você mesmo. Em muitos casos, as actions e os templates de um módulo são pretendidos para manipular dados de uma tabela. Como o código necessário para criar, recuperar, atualizar, e deletar registros de uma tabela é frequentemente o mesmo, symfony fornece um mecanismo chamado scaffolding para gerar este código para você. Consulte o capítulo 14 para mais informação sobre esta técnica. 
    6362 
    6463  
    7271---------------------- 
    7372 
    74 No Symfony, a lógica por tras das páginas esta armazenada nas actions, e a parte visual nos templates. Páginas sem nenhuma instrução lógica precisam de uma action vazia. 
     73No Symfony, a lógica por trás das páginas esta armazenada nas actions, e a parte visual nos templates. Páginas sem nenhuma instrução lógica precisam de uma action vazia. 
    7574 
    7675### Adicionando uma Ação (action) 
    9695    http://localhost/myapp_dev.php/mymodule/myAction 
    9796 
    98 o symfony irá reclamar que o template `myActionSuccess.php` esta faltando. Isto é normal; no symfony, uma pagina é sempre criada por um action e um template. 
    99  
    100  
    101 >**CAUTION** 
    102 >URLs (não nomes de dominio) são case-sensitive, e é assim no symfony (mesmo os métodos sendo case-insensitive no PHP). Isto significa que se você adicionar um método `executemyaction()`, ou `executeMyaction()`, e então você chamar `myAction` pelo browser, o symfony retornará um erro 404. 
     97o symfony irá reclamar que o template `myActionSuccess.php` está faltando. Isto é normal; no symfony, uma página é sempre criada por um action e um template. 
     98 
     99 
     100>**CUIDADO** 
     101>URLs (não nomes de domínio) são case-sensitive, e é assim no symfony (mesmo os métodos sendo case-insensitive no PHP). Isto significa que se você adicionar um método `executemyaction()`, ou `executeMyaction()`, e então você chamar `myAction` pelo browser, o symfony retornará um erro 404. 
    103102 
    104103- 
    107106>URLs são parte da resposta 
    108107> 
    109 >O Symfony contem um sistema do roteamento que permite ter uma separação completa entre o nome real da action e a forma que a URL é chamada. Isto permite um formato customizado da URL como parte da resposta. Você é limitado não pela estrutura de arquivo nem pelos parâmetros do pedido; a URL para uma action pode ser a frase que você quiser. Por exemplo, a chamada à ação `index` de um módulo chamado `article` geralmente é assim: 
     108>O symfony contém um sistema de roteamento que permite ter uma separação completa entre o nome real da action e a forma que a URL é chamada. Isto permite um formato customizado da URL como parte da resposta. Você é limitado não pela estrutura de arquivo nem pelos parâmetros do pedido; a URL para uma action pode ser a frase que você quiser. Por exemplo, a chamada à ação `index` de um módulo chamado `article` geralmente é assim: 
    110109> 
    111110>     http://localhost/myapp_dev.php/article/index?id=123 
    112111> 
    113 >Esta URL recupera artigo na base de dados. Neste exemplo, recupera um artigo (com id=123) da seção Europa que discute especificamente finanças da França. Mas a URL pode ser escrito de uma maneira completamente diferente com uma mudança simples no arquivo de configuração `routing.yml`: 
     112>Esta URL recupera artigo na base de dados. Neste exemplo, recupera um artigo (com id=123) da seção Europa que discute especificamente finanças da França. Mas a URL pode ser escrita de uma maneira completamente diferente com uma mudança simples no arquivo de configuração `routing.yml`: 
    114113> 
    115114>     http://localhost/articles/europe/france/finance.html 
    119118>     http://localhost/articles/tagged/finance+france+euro 
    120119> 
    121 >Symfony sabe como analisar e gerar URLs inteligentes para o usuário. O sistema do roteamento analisa automaticamente os parâmetros de uma URL inteligente e os torna disponíveis à ação. Formata também os hyperlinks incluídos na resposta de modo que pareça "espertos." Você aprenderá mais sobre esta característica no capítulo 9. 
     120>Symfony sabe como analisar e gerar URLs inteligentes para o usuário. O sistema do roteamento analisa automaticamente os parâmetros de uma URL inteligente e os torna disponíveis à ação. Formata também os hyperlinks incluídos na resposta de modo que pareçam "espertos." Você aprenderá mais sobre esta característica no Capítulo 9. 
    122121> 
    123122>Em geral, isto significa que a maneira que você nomeia as ações de suas aplicações não deve ser influenciada pela maneira que você usa para chamar uma URL, mas pelas funções das ações na aplicação. Um nome da ação explica o que a ação faz realmente, e é frequentemente um verbo na forma infinitivo (como `mostrar`, `listar`, `editar`, e assim por diante). Os nomes da ação podem ser feitos totalmente invisíveis ao usuário, assim não hesite em usar nomes explícitos para a ação (como o `listByName` ou `showWithComments`). Você economiza em comentários do código para explicar a função da ação, e o código será muito mais fácil de ler. 
    159158 
    160159                 
    161 >**TIP** 
    162 >Uma boa forma de verificar se a sintaxe do template esta legivel é o arquivo não conter código HTML impresso pelo PHP ou entre chaves. E na maioria das vezes, ao abrir a `<?php`, você deve fechá-lo com `?>` na mesma linha. 
    163  
    164 ### Passando informações da Action para o Template 
    165          
    166 O trabalho da action é fazer todo o cálculo, recuperação de dados, testes, e setar variáveis para que o template seja exibido ou testado. Symfony faz os atributos da classe da action (acessada através de `$this->variableName` na action) diretamente acessível ao template no namespace global (via `$variableName`). A listagem 4-6 e 4-7 mostra como passar a informação da action ao template. 
    167  
    168 Listagem 4-6 - Setando um atributo na Action para ser acessivel ao Template. 
     160>**DICA** 
     161>Uma boa forma de verificar se a sintaxe do template esta legível é o arquivo não conter código HTML impresso pelo PHP ou entre chaves. E na maioria das vezes, ao abrir a tag `<?php`, você deve fechá-lo com `?>` na mesma linha. 
     162 
     163### Passando informações da action para o template 
     164         
     165O trabalho da action é fazer todo o cálculo, recuperação de dados, testes, e setar variáveis para que o template seja exibido ou testado. Symfony faz os atributos da classe da action (acessada através de `$this->variableName` na action) diretamente acessível ao template no namespace global (via `$variableName`). As listagens 4-6 e 4-7 mostram como passar a informação da action ao template. 
     166 
     167Listagem 4-6 - Setando um atributo na action para ser acessível ao template. 
    169168 
    170169    [php] 
    180179    } 
    181180 
    182 Listagem 4-7 - O Template pode acessar diretamente um atributo da Action 
     181Listagem 4-7 - O template pode acessar diretamente um atributo da action 
    183182 
    184183    [php] 
    189188  
    190189         
    191 >**NOTE** 
    192 >O template já possui o acesso a algumas partes dos dados sem a necessidade de setar qualquer variável na action. Todo template pode chamar métodos dos objetos `$sf_context`, `$sf_request`, `$sf_params`, e de `$sf_user`. Eles contém os dados relacionados ao contexto atual, request, parâmetros da requisição, e sessão. Você aprenderá logo como usá-los eficientemente. 
    193  
    194 Obtendo Informações do Usuário com Formulários 
     190>**NOTA** 
     191>O template já possui o acesso a algumas partes dos dados sem a necessidade de setar qualquer variável na action. Todo template pode chamar métodos dos objetos `$sf_context`, `$sf_request`, `$sf_params`, e de `$sf_user`. Eles contém os dados relacionados ao contexto atual, request, parâmetros da requisição e sessão. Você aprenderá logo como usá-los eficientemente. 
     192 
     193Obtendo informações do usuário com formulários 
    195194---------------------------------------------- 
    196195 
    197 Os formulários são uma boa maneira de obter informação do usuário. Escrever formulários e elementos do formulário em HTML pode às vezes ser incômodo, especialmente quando você quer ser suportar XHTML. Você poderia incluir elementos do formulário em templates no symfony da maneira usual, como mostrado na listagem 4-8, mas o symfony fornece os helpers que fazem esta tarefa mais fácil. 
     196Os formulários são uma boa maneira de obter informações do usuário. Escrever formulários e elementos do formulário em HTML pode às vezes ser incômodo, especialmente quando você quer ser suportar XHTML. Você poderia incluir elementos do formulário em templates no symfony da maneira usual, como mostrado na listagem 4-8, mas o symfony fornece os helpers que fazem esta tarefa mais fácil. 
    198197 
    199198Listagem 4-8 - Templates podem incluir código HTML usual 
    210209    </form> 
    211210 
    212 Um `helper` é uma função PHP definida no symfony que pode ser usado dentro dos templates. Eles geram algum código HTML e é mais rápido usar-lo do que escrever o código HTML. Usando helpers do symfony, você pode ter o mesmo resultado que da listagem 4-8 com o código mostrado na listagem 4-9. 
    213  
    214  
    215 Listagem 4-9 - Isto é mais Rápido e Fácil se usar Helpers para Tags HTML 
     211Um `helper` é uma função PHP definida no symfony que pode ser usada dentro dos templates. Eles geram algum código HTML e é mais rápido usá-lo do que escrever o código HTML. Usando helpers do symfony, você pode ter o mesmo resultado que da listagem 4-8 com o código mostrado na listagem 4-9. 
     212 
     213 
     214Listagem 4-9 - Isto é mais rápido e fácil se usar helpers para tags HTML 
    216215 
    217216    [php] 
    254253>O benefício dos helpers nos templates está na velocidade de codificar, na clareza do código, e na concisão. O único preço a pagar é o tempo para aprender, que terminará quando você finalizar este livro, e o tempo de escrever um atalho em seu editor de texto favorito. Você não é obrigado a usar os helpers do symfony nos templates e pode escrever HTML da maneira que voce sempre fez, mas isto seria uma grande perda de tempo e muito menos divertido. 
    255254         
    256 Note que o uso da tag curta (`<?=`, equivalente a `<?php echo`) não é recomendado para aplicações web profissionais, pois seu web server em produção pode entender mais de uma línguagem scripting e conseqüentemente gerar uma confusão. Adicionalmente, os Tag curtos não trabalham com a configuração padrão do PHP e necessitam que usuário configure para ser ativado. Finalmente, quando você tem que tratar do XML, a validação falha porque `<?` é uma expressão especial do XML. 
    257  
    258 A manipulação de formulários merece um capítulo inteiro, pois o symfony fornece muitas ferramentas, na maior parte helpers, para torna-lo mais fácil. Você aprenderá mais sobre estes helpers no capítulo 10. 
    259  
    260 Chamando outra Action 
     255Note que o uso da tag curta (`<?=`, equivalente a `<?php echo`) não é recomendado para aplicações web profissionais, pois seu web server em produção pode entender mais de uma linguagem de scripts e conseqüentemente gerar uma confusão. Adicionalmente, as tags curtas não trabalham com a configuração padrão do PHP e necessitam que usuário as configure para ser ativada. Finalmente, quando você tem que tratar do XML, a validação falha porque `<?` é uma expressão especial do XML. 
     256 
     257A manipulação de formulários merece um capítulo inteiro, pois o symfony fornece muitas ferramentas, na maior parte helpers, para torná-lo mais fácil. Você aprenderá mais sobre estes helpers no Capítulo 10. 
     258 
     259Chamando outra action 
    261260--------------------- 
    262261 
    290289O HTML resultante será o mesmo que o anterior, exceto que quando você muda suas regras de roteamento, todos os templates se comportarão corretamente e reformatarão a URLs conformemente. 
    291290 
    292 O helper `link_to()`, como muitos outros helpers, aceita outros argumentos para opções especiais e atributos adicionais da Tag. A listagem 4-12 mostra um exemplo de um argumento opcional e o HTML resultante. O argumento opcional é qualquer array associativa ou uma simples string que tenha os pares `key=value` separados por espaços em branco. 
    293  
    294 Listagem 4-12 - Muitos Helper Aceitam um Argumento opcional 
    295  
    296     [php] 
     291O helper `link_to()`, como muitos outros helpers, aceita outros argumentos para opções especiais e atributos adicionais da tag. A listagem 4-12 mostra um exemplo de um argumento opcional e o HTML resultante. O argumento opcional é qualquer array associativo ou uma simples string que tenha os pares `key=value` separados por espaços em branco. 
     292 
     293Listagem 4-12 - Muitos helpers aceitam um argumento opcional 
     294 
     295    [php 
    297296    // Option argument as an associative array 
    298297    <?php echo link_to('I never say my name', 'mymodule/anotherAction?name=anonymous', 
    313312 
    314313 
    315 Sempre que você usa um helper do symfony que imprime uma Tag HTML, você pode inserir atributos adicionais da Tag (como o atributo da classe no exemplo da listagem 4-12) no argumento. Você mesmo pode escrever estes atributos da maneira "rápida-e-suja" do HTML 4.0 (sem aspas duplas), e o symfony irá imprimir-los em um XHTML formatado. Esta é uma outra razão porque os helpers são mais rápidos de se escrever HTML. 
    316  
    317 >**NOTE**              
     314Sempre que você usa um helper do symfony que imprime uma tag HTML, você pode inserir atributos adicionais da tag (como o atributo da classe no exemplo da listagem 4-12) no argumento. Você mesmo pode escrever estes atributos da maneira "rápida-e-suja" do HTML 4.0 (sem aspas duplas), e o symfony irá imprimí-los em um XHTML formatado. Esta é uma outra razão porque os helpers são mais rápidos de se escrever HTML. 
     315 
     316>**NOTA**              
    318317>Porque isto requer uma analise gramatical e transformação adicionais, a sintaxe com string é uma pouco mais lenta do que a sintaxe com array. 
    319318 
    320 Como os helpers de formulário, os helpers de link são numerosos e têm muitas opções. O capítulo 9 descrevê-os em detalhes. 
    321  
    322 Obtendo Informação da requisição 
     319Como os helpers de formulário, os helpers de link são numerosos e têm muitas opções. O Capítulo 9 descrevê-os em detalhes. 
     320 
     321Obtendo informação da requisição 
    323322-------------------------------- 
    324323 
    325324Quando o usuário envia a informação através de um formulário (geralmente em um pedido via POST) ou através da URL (requisição GET), você pode recuperar os dados relacionados da action com o método `getRequestParameter()` do objeto `sfActions`. A listagem 4-13 mostra como, no `anotherAction`, você recupera o valor do parâmetro `name`. 
    326325 
    327 Listagem 4-13 - Obtendo dados de um parametro da requisição na Action 
     326Listagem 4-13 - Obtendo dados de um parâmetro da requisição na action 
    328327 
    329328    [php] 
    351350  
    352351 
    353 >**NOTE** 
     352>**NOTA** 
    354353>Por que não usar as variáveis `$_POST`, `$_GET`, ou `$_REQUEST`? Porque seu URL está formatado diferentemente (como em `http://localhost/articles/europe/france/finance.html`, sem o `?` nem `=`), as variáveis usuais de PHP não funcionam, e somente o sistema de roteamento consegue recuperar os parâmetros do pedido. E você pode querer ter filtros de input para impedir code injection, que é somente possível se você mantiver todos os parâmetros do pedido em um local limpo.        
    355354         
    356 O objeto `$sf_params` é mais poderoso do que apenas sendo equivalente a uma array. Por exemplo, se você quiser somente testar a existência de um parâmetro do pedido, você pode simplesmente usar o método de `$sf_params->has()` em vez de testar o valor real com `get()`, como na listagem 4-15. 
    357  
    358 Listagem 4-15 - Testando a Existencia do parâmetro do pedido no Template 
     355O objeto `$sf_params` é mais poderoso do que apenas um array equivalente. Por exemplo, se você quiser somente testar a existência de um parâmetro do pedido, você pode simplesmente usar o método de `$sf_params->has()` em vez de testar o valor real com `get()`, como na listagem 4-15. 
     356 
     357Listagem 4-15 - Testando a existência do parâmetro do pedido no template 
    359358 
    360359    [php] 
    375374------- 
    376375 
    377 No symfony, as páginas são compostas de uma action (um método no arquivo `actions/actions.class.php` definido como executavel) e de um template (um arquivo no diretório `templates/`, terminando geralmente com `Success.php`). São agrupados em módulos, de acordo com sua função na aplicação. Escrever templates é facilitado pelos helpers, que são funções fornecidas pelo symfony e retorna codigo HTML. Você precisa pensar na URL como parte da resposta, que pode ser formatada como necessario, e por isso você deve deixar de usar referências direta ao URL no nome da action ou do parametro de retorno da requisição. 
     376No symfony, as páginas são compostas de uma action (um método no arquivo `actions/actions.class.php` definido como executável) e de um template (um arquivo no diretório `templates/`, terminando geralmente com `Success.php`). São agrupados em módulos, de acordo com sua função na aplicação. Escrever templates é facilitado pelos helpers, que são funções fornecidas pelo symfony e retornam código HTML. Você precisa pensar na URL como parte da resposta, que pode ser formatada como necessario, e por isso você deve deixar de usar referências diretas à URL no nome da action ou do parâmetro de retorno da requisição. 
    378377 
    379378Uma vez que você saiba estes princípios básicos, você já pode escrever uma aplicação web inteira com symfony. Mas isso pode ser um tanto demorado e para resolver isso, cada tarefa que você fará durante o desenvolvimento da aplicação é facilitado por alguma característica do symfony. É por isso que o livro não termina agora.