Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

[pt_BR][jobeet][day6] First translation

  • Loading branch information...
commit 50b4e79ee033f3efb0584b005e7728e302fe5b2a 1 parent d7eb9b6
@rogeriopradoj rogeriopradoj authored
Showing with 265 additions and 241 deletions.
  1. +265 −241 jobeet/pt_BR/06.markdown
View
506 jobeet/pt_BR/06.markdown
@@ -1,27 +1,29 @@
-Day 6: More with the Model
-==========================
+Dia 7: Mais com o Model
+=======================
-Yesterday was great. You learned how to create pretty URLs and how to use the
-symfony framework to automate a lot of things for you.
+O dia de ontem foi excelente. Você aprendeu com criar URLs amigáveis e como
+usar o symfony para automatizar várias coisas para você.
-Today, we will enhance the Jobeet website by tweaking the code here and there.
-In the process, you will learn more about all the features we have introduced
-during the first five days of this tutorial.
+Hoje nós vamos aprimorar o site do Jobeet ajustando o código aqui e ali. No
+processo, você aprenderá mais sobre todas as funcionalidades que introduzimos
+durante os primeiros cinco dias desse tutorial.
<propel>
-The Propel Criteria Object
---------------------------
+O Objeto Critério do Propel
+------------------------------
</propel>
<doctrine>
-The Doctrine Query Object
--------------------------
+O Objeto Critério do Doctrine
+--------------------------------
</doctrine>
-From the second day's requirements:
+Dos requisitos do segundo dia:
- "When a user comes to the Jobeet website, she sees a list of active jobs."
+ "Quando um usuário vai ao site do Jobeet, ele vê uma lista dos empregos
+ ativos."
-But as of now, all jobs are displayed, whether they are active or not:
+Mas, do jeito que está agora, todos os empregos estão sendo mostrados, estejam
+eles ativos ou não:
[php]
// apps/frontend/modules/job/actions/actions.class.php
@@ -43,19 +45,19 @@ But as of now, all jobs are displayed, whether they are active or not:
}
<propel>
-An active job is one that was posted less than 30 days ago. The `doSelect()`
-method takes a ~`Criteria|Propel Criteria`~ object that describes the database
-request to execute. In the code above, an empty `Criteria` is passed, which
-means that all the records are retrieved from the database.
+Um emprego ativo é aquele que foi anunciado a menos de 30 dias. O método
+`doSelect()` recebe um objeto `Criteria` que descreve a requisição para ser
+executada no banco. No código acima, um objeto `Criteria` vazio é passado, o
+que significa que todos os registros serão retornados do banco de dados.
</propel>
<doctrine>
-An active job is one that was posted less than 30 days ago. The
-`~Doctrine_Query~::execute()` method will make a request to the database. In the
-code above, we are not specifying any where condition which means that all the
-records are retrieved from the database.
+Um emprego ativo é aquele que foi anunciado a menos de 30 dias. O método
+`Doctrine_Query::execute()` fará uma requisição no banco de dados. No código
+acima não estamos especificando nenhuma condição, o que significa que todos
+os registros serão retornados do banco de dados.
</doctrine>
-Let's change it to only select active jobs:
+Vamos mudá-lo para buscar apenas os empregos ativos:
[php]
public function executeIndex(sfWebRequest $request)
@@ -78,10 +80,10 @@ Let's change it to only select active jobs:
}
<propel>
-The `Criteria::add()` method adds a `WHERE` clause to the generated SQL. Here,
-we restrict the criteria to only select jobs that are no older than 30 days. The
-`add()` method accepts a lot of different comparison operators; here are the
-most common ones:
+O método `Criteria::add()` adiciona uma clásula `WHERE` no SQL gerado. Aqui,
+nós restringimos o critério para buscar apenas os empregos que não tem mais de
+30 dias. O método `add()` aceita uma série de operadores de comparação
+diferentes; aqui estão os mais comuns:
* `Criteria::EQUAL`
* `Criteria::NOT_EQUAL`
@@ -95,17 +97,17 @@ most common ones:
`Criteria::CURRENT_TIMESTAMP`
</propel>
-Debugging ##ORM## generated SQL
--------------------------------
+Depurando o SQL gerado pelo ##ORM##
+-----------------------------------
-As you don't write the SQL statements by hand, ##ORM## will take care of the
-differences between database engines and will generate SQL statements optimized
-for the database engine you choose during day 3. But sometimes, it is of
-great help to see the SQL generated by ##ORM##; for instance, to ~debug|Debug~ a
-query that does not work as expected. In the `dev` ~environment|Environments~,
-symfony logs these queries (along with much more) in the `log/` directory. There
-is one log file for every combination of an application and an environment. The
-file we are looking for is named `frontend_dev.log`:
+Como nós não escrevemos os comandos SQL manualmente, o ##ORM## irá cuidar das
+diferenças entre os sistemas de banco de dados e gerará as instruções SQL
+otimizadas para o SGBD que você escolheu no dia 3. Mas algumas vezes seria de
+grande ajuda enxergar o SQL gerado pelo ##ORM##; por exemplo, para depurar ou
+"debugar" uma consulta que não esteja funcionando como esperado. No ambiente
+`dev` o symfony registra essas consultas (e muitas outras coisas) no diretório
+`log/`. Existe um arquivo de log para cada combinação de uma aplicação e um
+ambiente. O arquivo que nós estamos procurando se chama `frontend_dev.log`:
# log/frontend_dev.log
<propel>
@@ -119,16 +121,15 @@ file we are looking for is named `frontend_dev.log`:
Dec 6 15:47:12 symfony [debug] {sfPropelLogger} Binding '2008-11-06 15:47:12'
➥ at position :p1 w/ PDO type PDO::PARAM_STR
-You can see for yourself that Propel has generated a where clause for the
-`created_at` column (`WHERE jobeet_job.CREATED_AT > :p1`).
+Você pode ver com seus próprios olhos que o Propel gerou um cláusula where para
+a coluna `created_at` (`WHERE jobeet_job.CREATED_AT > :p1`).
>**NOTE**
->The `:p1` string in the query indicates that Propel generates ~prepared statement~s.
->The actual value of `:p1` ('`2008-11-06 15:47:12`' in the example
->above) is passed during the execution of the query and properly escaped by
->the database engine. The use of prepared statements dramatically reduces your
->exposure to [~SQL injection~](http://en.wikipedia.org/wiki/Sql_injection)
->attacks.
+>A string `:p1` na consulta indica que o Propel gerou um "prepared statement".
+>O valor real de `:p1` ('`2008-11-06 15:47:12`' no exemplo acima) é passado
+>durante a execução da consulta e é escapado adequadamente pelo sistema de
+>banco de dados. O uso de prepared statement reduz radicalmente sua exposição
+>a ataques de [~SQL injection~](http://en.wikipedia.org/wiki/Sql_injection).
</propel>
<doctrine>
Dec 04 13:58:33 symfony [info] {sfDoctrineLogger} executeQuery : SELECT
@@ -142,41 +143,45 @@ You can see for yourself that Propel has generated a where clause for the
j.updated_at AS j__updated_at FROM jobeet_job j
WHERE j.created_at > ? (2008-11-08 01:13:35)
-You can see for yourself that Doctrine has a where clause for the `created_at`
-column (`WHERE j.created_at > ?`).
+Você pode ver com seus próprios olhos que o Doctrine gerou um cláusula where para
+a coluna `created_at` (`WHERE j.created_at > ?`).
>**NOTE**
->The `?` string in the query indicates that Doctrine generates ~prepared statement~s.
->The actual value of `?` ('2008-11-08 01:13:35' in the example
->above) is passed during the execution of the query and properly escaped by
->the database engine. The use of prepared statements dramatically reduces your
->exposure to [~SQL injection~](http://en.wikipedia.org/wiki/Sql_injection) attacks.
+>O caracter `?` na consulta indica que o Doctrine gerou um "prepared statement".
+>O valor real de `?` ('2008-11-08 01:13:35' no exemplo acima) é passado
+>durante a execução da consulta e é escapado adequadamente pelo sistema de
+>banco de dados. O uso de prepared statement reduz radicalmente sua exposição
+>a ataques de [~SQL injection~](http://en.wikipedia.org/wiki/Sql_injection).
</doctrine>
-This is good, but it's a bit annoying to have to switch between the browser, the
-IDE, and the log file every time you need to test a change. Thanks to the
-symfony web debug toolbar, all the information you need is also available within
-the comfort of your browser:
+Isso é bom, mas é um tanto chato ter quer trocar entre o navegar, a IDE e o log
+cada vez que precisar testar uma mudança. Graças a web debug toolbar do symfony
+toda a informação que você precisa também está disponível no conforto do seu
+navegador:
-![SQL statements in the web debug toolbar](http://www.symfony-project.org/images/jobeet/1_4/06/web_debug_sql.png)
+![Consultas SQL na web debug toolbar](http://www.symfony-project.org/images/jobeet/1_4/06/web_debug_sql.png)
-Object ~Serialization~
-----------------------
+Serialização de Objetos
+-----------------------
-Even if the above code works, it is far from perfect as it does not take into
-account some requirements from day 2:
+Mesmo que o código acima funcione, ele está longe de ser perfeito pois ele não
+leva em consideração alguns requisitos do dia 2:
- "A user can come back to re-activate or extend the validity of the job ad
- for an extra 30 days..."
+ "Um usuário pode retornar para reativar ou aumentar a validade do emprego por
+ 30 dias adicionais..."
-But as the above code only relies on the `created_at` value, and because this
-column stores the creation date, we cannot satisfy the above requirement.
+Mas como o código acima só se baseia no valor `created_value`, e como essa
+coluna guarda a data de criação, não conseguimos satisfazer o requisito acima.
-But if you remember the database schema we have described during day 3, we also have defined an `expires_at` column. Currently, if this value is not set in fixture file, it remains always empty. But when a job is created, it can be automatically set to 30 days after the current date.
+Mas se você se lembrar do esquema do banco que descrevemos durante o dia 3, nós
+também definimos uma coluna `expires_at`. No momento, se esse valor não estiver
+definido no arquivo fixture, ele permanece sempre vazio. Mas quando um emprego
+é criado, ele pode ser preenchido automaticamente com 30 dias depois da data
+atual.
-When you need to do something automatically before a ##ORM## object is
-serialized to the database, you can override the `save()` method of the model
-class:
+Quando você precisa fazer algo automaticamente antes que o objeto do ##ORM##
+seja serializado para o banco de dados, você pode sobrescrever o método `save()`
+da classe model:
<propel>
[php]
@@ -217,11 +222,11 @@ class:
}
</doctrine>
-The `isNew()` method returns `true` when the object has not been serialized yet
-in the database, and `false` otherwise.
+O método `isNew()` retorna `true` quando o objeto ainda não tiver sido
+serializado no banco, e `falso` caso contrário.
-Now, let's change the action to use the `expires_at` column instead of the
-`created_at` one to select the active jobs:
+Agora, vamos alterar a action para usar a coluna `expires_at` em vez da
+`created_at` para selecionar os empregos ativos:
[php]
public function executeIndex(sfWebRequest $request)
@@ -241,15 +246,15 @@ Now, let's change the action to use the `expires_at` column instead of the
</doctrine>
}
-We restrict the query to only select jobs with the `expires_at` date in the
-future.
+Nós restringimos a consulta para buscar apenas os empregos em que a data
+`expires_at` esteja no futuro.
-More with Fixtures
-------------------
+Mais com os Fixtures
+--------------------
-Refreshing the Jobeet homepage in your browser won't change anything as the jobs
-in the database have been posted just a few days ago. Let's change the fixtures
-to add a job that is already expired:
+Atualizar a página inicial do Jobeet no navegador não irá mudar nada pois os
+empregos no banco de dados foram anunciados alguns dias atrás. Vamos alterar os
+fixtures para adicionar um emprego que já está expirado:
<propel>
[yml]
@@ -293,46 +298,47 @@ to add a job that is already expired:
</doctrine>
>**NOTE**
->Be careful when you copy and paste code in a ~fixture|Fixtures~ file to not break the
->indentation. The `expired_job` must only have two spaces before it.
+>Tenha cuidado quando você copiar e colar código num arquivo fixture para não
+>quebrar o recuo. `expired_job` precisa ter apenas dois espaços antes dele.
-As you can see in the job we have added in the fixture file, the `created_at`
-column value can be defined even if it is automatically filled by ##ORM##. The
-defined value will override the default one. Reload the fixtures and refresh
-your browser to ensure that the old job does not show up:
+Como você pode ver no emprego que adicionamos no arquivo fixture, o valor da
+coluna `created_at` pode ser definido mesmo se ele é preenchido automaticamente
+pelo ##ORM##. O valor definido irá sobrescrever o padrão. Recarregue os
+fixtures e atualize seu navegador para garantir que o emprego antigo não será
+mostrado:
$ php symfony propel:data-load
-You can also execute the following query to make sure that the `expires_at`
-column is automatically filled by the `save()` method, based on the `created_at`
-value:
+Você também pode executar a seguinte consulta para ter certeza que a coluna
+`expires_at` é automaticamente preenchida pelo método `save()`, baseado
+no valor `created_at`:
SELECT `position`, `created_at`, `expires_at` FROM `jobeet_job`;
-Custom Configuration
---------------------
+Configuração Personalizada
+--------------------------
-In the `JobeetJob::save()` method, we have hardcoded the number of days for the
-job to expire. It would have been better to make the 30 days configurable. The
-symfony framework provides a built-in configuration file for
-~application|Application~ specific ~settings|Settings~, the ~`app.yml`~ file.
-This YAML file can contain any setting you want:
+No método `JobeetJob::save()`, nós fizemos hardcode do número de dias para
+que o emprego expire. Seria melhor fazer com que esses 30 dias fossem
+configuráveis. O framework symfony fornece um arquivo de configuração embutido
+para configurações específicas da aplicação, o arquivo `app.yml`. Esse arquivo
+YAML pode conter qualquer definição que você quiser
[yml]
# apps/frontend/config/app.yml
all:
active_days: 30
-In the application, these settings are available through the global ~`sfConfig`~
-class:
+Na aplicação, essas configurações ficam disponíveis através da classe global
+`sfConfig`:
[php]
sfConfig::get('app_active_days')
-The setting has been prefixed by `app_` because the `sfConfig` class also
-provides access to symfony settings as we will see later on.
+A configuração foi prefixada com `app_` porque a classe `sfConfig` também
+fornece acesso às configurações do symfony como veremos mais à frente.
-Let's update the code to take this new setting into account:
+Vamos atualizar o código para levar em conta a nova configuração:
<propel>
[php]
@@ -362,30 +368,32 @@ Let's update the code to take this new setting into account:
}
</doctrine>
-The ~`app.yml`~ configuration file is a great way to centralize ~global
-settings|Global Settings~ for your application.
+O arquivo de configuração `app.yml` é um ótimo meio de centralizar configurações
+globais para sua aplicação.
-Last, if you need ~project-wide settings|Global Configuration~, just create a
-new `app.yml` file in the `config` folder at the root of your symfony project.
+Por último, se você precisar das configurações em todo o projeto, simplesmente
+crie um novo arquivo `app.yml` na pasta `config` na raiz do seu projeto
+symfony.
-Refactoring
+Refatorando
-----------
-Although the code we have written works fine, it's not quite right yet. Can you
-spot the problem?
+Embora o código que escrevemos esteja funcionando, ele não está totalmente
+certo ainda. Você consegue identificar o problema?
<propel>
-The `Criteria` code does not belong to the action (the Controller layer), it
-belongs to the Model layer. In the ~MVC~ model, the Model defines all the
-~business logic|Business Logic~, and the Controller only calls the Model to
-retrieve data from it. As the code returns a collection of jobs, let's move the
-code to the `JobeetJobPeer` class and create a `getActiveJobs()` method: </propel>
+O código em `Criteria` não pertence à action (a camada Controller), ele é da
+camada Model. No modelo MVC, o Model define toda a regra de negócio, e o
+Controller apenas chama o Model para pegar dados dele. Como o código retorna
+uma coleção de empregos, vamos mover o código para a classe `JobeetJobPeer` e
+criar um método `getActiveJobs()`:
+</propel>
<doctrine>
-The `Doctrine_Query` code does not belong to the action (the Controller layer),
-it belongs to the Model layer. In the ~MVC~ model, the Model defines all the
-~business logic|Business Logic~, and the Controller only calls the Model to
-retrieve data from it. As the code returns a collection of jobs, let's move the
-code to the `JobeetJobTable` class and create a `getActiveJobs()` method:
+O código em `Doctrine_Query` não pertence à action (a camada Controller), ele é
+da camada Model. No modelo MVC, o Model define toda a regra de negócio, e o
+Controller apenas chama o Model para pegar dados dele. Como o código retorna
+uma coleção de empregos, vamos mover o código para a classe `JobeetJobTable` e
+criar um método `getActiveJobs()`:
</doctrine>
<propel>
@@ -418,7 +426,8 @@ code to the `JobeetJobTable` class and create a `getActiveJobs()` method:
}
</doctrine>
-Now the action code can use this new method to retrieve the active jobs.
+Agora o código da action pode usar esse novo método para retornar os empregos
+ativos.
[php]
public function executeIndex(sfWebRequest $request)
@@ -432,14 +441,14 @@ Now the action code can use this new method to retrieve the active jobs.
</doctrine>
}
-This ~refactoring|Refactoring~ has several benefits over the previous code:
+Essa refatoração tem várias vantagens sobre o código anterior:
- * The logic to get the active jobs is now in the Model, where it belongs
- * The code in the controller is thinner and much more readable
- * The `getActiveJobs()` method is re-usable (for instance in another action)
- * The model code is now unit testable
+ * A lógica para pegar os empregos ativos agora está no Model, onde deve ficar
+ * O código no controller está mais conciso e muito mais legível
+ * O método `getActiveJobs()` é reutilizável (por exemplo em outra action)
+ * O código do model agora é passível de receber teste unitário
-Let's sort the jobs by the `expires_at` column:
+Vamos ordenar os empregos pela coluna `expires_at`:
[php]
<propel>
@@ -464,31 +473,31 @@ Let's sort the jobs by the `expires_at` column:
</doctrine>
<propel>
-The `addDescendingOrderByColumn()` method adds an `ORDER BY` clause to the
-generated SQL (`addAscendingOrderByColumn()` also exists).
+O método `addDescendingOrderByColumn()` adiciona um cláusula `ORDER BY` no SQL
+gerado (também existe o `addAscendingOrderByColumn()`).
</propel>
<doctrine>
-The `orderBy` methods sets the `ORDER BY` clause to the generated SQL
-(`addOrderBy()` also exists).
+O método `orderBy` define a cláusula `ORDER BY` no SQL gerado (também existe
+o `addOrderBy()`).
</doctrine>
-Categories on the Homepage
---------------------------
+Categorias na Página Inicial
+----------------------------
-From the second day's requirements:
+Dos requisitos do segundo dia:
- "The jobs are sorted by category and then by publication date (newer jobs
- first)."
+ "Os empregos são ordenados por categoria e depois pela data de publicação
+ (primeiro os empregos mais novos)."
-Until now, we have not taken the job category into account. From the
-requirements, the homepage must display jobs by category. First, we need to get
-all categories with at least one active job.
+Até agora, não temos nos preocupado com a categoria de um emprego. Só que nos
+requisitos, a página inicial precisa mostrar empregos por categoria. Primeiro,
+precisamos pegar todas as categorias que tem pelo menos um emprego ativo.
<propel>
-Open the `JobeetCategoryPeer` class and add a `getWithJobs()` method:
+Abra a classe `JobeetCategoryPeer` e adicione o método `getWithJobs()`:
</propel>
<doctrine>
-Open the `JobeetCategoryTable` class and add a `getWithJobs()` method:
+Abra a classe `JobeetCategoryTable` e adicione o método `getWithJobs()`:
</doctrine>
<propel>
@@ -507,10 +516,10 @@ Open the `JobeetCategoryTable` class and add a `getWithJobs()` method:
}
}
-The `Criteria::addJoin()` method adds a ~`JOIN`~ clause to the generated SQL. By
-default, the join condition is added to the `WHERE` clause. You can also change
-the join operator by adding a third argument (`Criteria::LEFT_JOIN`,
-`Criteria::RIGHT_JOIN`, and `Criteria::INNER_JOIN`).
+O método `Criteria::addJoin() adiciona um clásula `JOIN` no SQL gerado. Por
+padrão, a condição join é adicionada na cláusula `WHERE`. Você também pode
+modificar o operador join adicionando um terceiro argumento
+(`Criteria::LEFT_JOIN`, `Criteria::RIGHT_JOIN`, and `Criteria::INNER_JOIN`).
</propel>
<doctrine>
[php]
@@ -528,7 +537,7 @@ the join operator by adding a third argument (`Criteria::LEFT_JOIN`,
}
</doctrine>
-Change the `index` action accordingly:
+Mude a action `index` de acordo:
[php]
// apps/frontend/modules/job/actions/actions.class.php
@@ -543,8 +552,9 @@ Change the `index` action accordingly:
</doctrine>
}
-In the template, we need to iterate through all categories and display the
-active jobs:
+No template, precisamos iterar através de todas as categorias e mostrar os
+empregos ativos:
+
[php]
// apps/frontend/modules/job/templates/indexSuccess.php
@@ -580,14 +590,14 @@ active jobs:
</div>
>**NOTE**
->To display the category name in the template, we have used `echo $category`.
->Does this sound weird? `$category` is an object, how can `echo` magically
->display the category name? The answer was given during day 3 when we have
->defined the magic `__toString()` method for all the model classes.
+>Para mostrar o nome da categoria no template, nos usamos `echo $category`.
+>Isso soa estranho? `$category` é um objeto, como o `echo` pode magicamente
+>mostrar o nome da categoria? A resposta foi dada no dia 3 quando definimos
+>o método mágico `__toString()` para todas as classes model.
<propel>
-For this to work, we need to add the `getActiveJobs()` method to the
-`JobeetCategory` class that returns the active jobs for the category object:
+Para isso funcionar, precisamos adicionar o método `getActiveJobs()` na classe
+`JobeetCategory` que retorna os empregos ativos de um objeto categoria:
[php]
// lib/model/JobeetCategory.php
@@ -599,20 +609,20 @@ For this to work, we need to add the `getActiveJobs()` method to the
return JobeetJobPeer::getActiveJobs($criteria);
}
-In the `add()` call, we have omitted the third argument as `Criteria::EQUAL` is
-the default value.
+Na chamada `add()`, nós omitimos o terceiro argumento pois `Criteria::EQUAL` é
+o valor padrão.
-The `JobeetCategory::getActiveJobs()` method uses the
-`JobeetJobPeer::getActiveJobs()` method to retrieve the active jobs for the
-given category.
+O método `JobeetCategory::getActiveJobs()` usa o método
+`JobeetJobPeer::getActiveJobs()` para retornar os empregos ativos de uma
+determinada categoria.
-When calling the `JobeetJobPeer::getActiveJobs()`, we want to restrict the
-condition even more by providing a category. Instead of passing the category
-object, we have decided to pass a `Criteria` object as this is the best way to
-encapsulate a generic condition.
+Quando chamamos `JobeetJobPeer::getActiveJobs()`, nós queremos restringir a
+condição um pouco mais fornecendo uma categoria. Em vez de passar o objeto
+categoria, decidimos passar um objeto `Criteria` pois essa é a melhor forma
+de encapsular uma condição genérica.
-The `getActiveJobs()` needs to merge this `Criteria` argument with its own
-criteria. As the `Criteria` is an object, this is quite simple:
+`getActiveJobs()` precisa mesclar esse argumento `Criteria` com seu próprio
+critério. Como `Criteria` é um objeto, isso é bem simples:
[php]
// lib/model/JobeetJobPeer.php
@@ -631,8 +641,8 @@ criteria. As the `Criteria` is an object, this is quite simple:
}
</propel>
<doctrine>
-For this to work, we need to add the `getActiveJobs()` method to the
-`JobeetCategory` class:
+Para isso funcionar, precisamos adicionar o método `getActiveJobs()` na classe
+`JobeetCategory`:
[php]
// lib/model/doctrine/JobeetCategory.class.php
@@ -645,17 +655,17 @@ For this to work, we need to add the `getActiveJobs()` method to the
return Doctrine_Core::getTable('JobeetJob')->getActiveJobs($q);
}
-The `JobeetCategory::getActiveJobs()` method uses the
-`Doctrine_Core::getTable('JobeetJob')->getActiveJobs()` method to retrieve the
-active jobs for the given category.
+O método `JobeetCategory::getActiveJobs()` usa o método
+`Doctrine_Core::getTable('JobeetJob')->getActiveJobs()` para retornar os
+empregos ativos de uma determinada categoria.
-When calling the `Doctrine_Core::getTable('JobeetJob')->getActiveJobs()`, we
-want to restrict the condition even more by providing a category. Instead of
-passing the category object, we have decided to pass a `Doctrine_Query` object
-as this is the best way to encapsulate a generic condition.
+Quando chamamos `Doctrine_Core::getTable('JobeetJob')->getActiveJobs()`, nós
+queremos restringir a condição um pouco mais fornecendo uma categoria. Em vez
+de passar o objeto categoria, decidimos passar um objeto `Criteria` pois essa
+é a melhor forma de encapsular uma condição genérica.
-The `getActiveJobs()` needs to merge this `Doctrine_Query` object with its own
-query. As the `Doctrine_Query` is an object, this is quite simple:
+`getActiveJobs()` precisa mesclar esse objeto `Doctrine_Query` com seu próprio
+critério. Como `Doctrine_Query` é um objeto, isso é bem simples:
[php]
// lib/model/doctrine/JobeetJobTable.class.php
@@ -674,15 +684,15 @@ query. As the `Doctrine_Query` is an object, this is quite simple:
}
</doctrine>
-Limit the Results
------------------
+Limitando os Resultados
+-----------------------
-There is still one requirement to implement for the homepage job list:
+Ainda há um requisito para implementar para a página da lista de empregos:
- "For each category, the list only shows the first 10 jobs and a link allows
- to list all the jobs for a given category."
+ "Para cada categoria, a lista mostra os 10 primeiros empregos e um link
+ permite listar todos os empregos daquela categoria."
-That's simple enough to add to the `getActiveJobs()` method:
+Isso é bem simples de adicionar no método `getActiveJobs()`:
<propel>
[php]
@@ -710,42 +720,43 @@ That's simple enough to add to the `getActiveJobs()` method:
}
</doctrine>
-The appropriate ~`LIMIT`~ clause is now hard-coded into the Model, but it is
-better for this value to be configurable. Change the template to pass a maximum
-number of jobs set in `app.yml`:
+A clásula `LIMIT` agora está hard-coded no Model, mas é melhor que esse valor
+seja configurável. Mude o template para passar um número máximo de empregos
+definido no `app.yml`:
[php]
<!-- apps/frontend/modules/job/templates/indexSuccess.php -->
<?php foreach ($category->getActiveJobs(sfConfig::get('app_max_jobs_on_homepage')) as $i => $job): ?>
-and add a new setting in `app.yml`:
+e adicione uma nova configuração no `app.yml`:
[yml]
all:
active_days: 30
max_jobs_on_homepage: 10
-![Homepage sorted by category](http://www.symfony-project.org/images/jobeet/1_4/06/homepage.png)
+![Página inicial ordenada por categoria](http://www.symfony-project.org/images/jobeet/1_4/06/homepage.png)
-Dynamic Fixtures
-----------------
+Fixtures Dinâmicos
+------------------
-Unless you lower the `max_jobs_on_homepage` setting to one, you won't see any
-difference. We need to add a bunch of jobs to the ~fixture|Fixtures~. So, you
-can copy and paste an existing job ten or twenty times by hand... but there's a
-better way. Duplication is bad, even in fixture files.
+A menos que você diminua para um a configuração `max_jobs_on_homepage`, você
+não verá nenhuma diferença. Nós precisamos adicionar um punhado do empregos no
+fixture. Então, você pode copiar e colar um emprego existente dez ou vinte
+vezes manualmente... mas existe um jeito melhor. A duplicação é ruim mesmo nos
+arquivos de fixture.
-symfony to the rescue! ~YAML~ files in symfony can contain PHP code that will be
-evaluated just before the parsing of the file. Edit the
+symfony, ao resgate! Os arquivos YAML no symfony podem conter código PHP que
+será avaliado pouco antes da análise do arquivo. Edite o arquivo de fixture
<propel>
-`020_jobs.yml` fixtures file and add the following code at the end:
+`020_jobs.yml` e adicione o seguinte código no fim:
</propel>
<doctrine>
-`jobs.yml` fixtures file and add the following code at the end:
+`jobs.yml` e adicione o seguinte código no fim:
</doctrine>
[php]
- # Starts at the beginning of the line (no whitespace before)
+ # Começa no início da linha (sem espaços em branco na frente)
<?php for ($i = 100; $i <= 130; $i++): ?>
job_<?php echo $i ?>:
<propel>
@@ -767,40 +778,41 @@ evaluated just before the parsing of the file. Edit the
<?php endfor ?>
-Be careful, the YAML parser won't like you if you mess up with ~Indentation|Code
-Formatting~. Keep in mind the following simple tips when adding PHP code to a
-YAML file:
+Tome cuidado, o analisador YAML não vai gostar se você bagunçar ~o Recuo|a
+Formatação do Código~. Tenha em mente essas dicas simples quando estiver
+adicionando código PHP em um arquivo YAML:
- * The `<?php ?>` statements must always start the line or be embedded in a
- value.
+ * As declarações `<?php ?>` precisam sempre começar a linha ou estar
+ embutidas em um valor.
- * If a `<?php ?>` statement ends a line, you need to explicly output a new
- line ("\n").
+ * Se uma declaração `<?php ?>` terminar uma linha, você precisa gerar a
+ saída de uma nova linha ("\") explicitamente.
-You can now reload the fixtures with the `propel:data-load` task and see if only
-`10` jobs are displayed on the homepage for the `Programming` category. In the
-following screenshot, we have changed the maximum number of jobs to five to make
-the image smaller:
+Agora você pode recarregar os fixtures com o comando `propel:data-load` e
+verificar se apenas `10` empregos são listados na página inicial da categoria
+`Programming`. Na próxima captura de tela, mudamos o número máximo de empregos
+para cinco de forma a deixar a imagem menor:
-![Pagination](http://www.symfony-project.org/images/jobeet/1_4/06/pagination.png)
+![Paginação](http://www.symfony-project.org/images/jobeet/1_4/06/pagination.png)
-Secure the Job Page
--------------------
+Protegendo a Página de Emprego
+------------------------------
-When a job expires, even if you know the URL, it must not be possible to access
-it anymore. Try the URL for the expired job (replace the `id` with the actual
-`id` in your database - `SELECT id, token FROM jobeet_job WHERE expires_at <
-NOW()`):
+Quando um emprego expira, mesmo que você saiba a URL, não deve ser possível
+acessá-lo mais. Tente acessar a URL de um emprego expirado (substitua o `id`
+com o `id` real do seu banco de dados - `SELECT id, token FROM jobeet_job
+WHERE expires_at < NOW()`):
/frontend_dev.php/job/sensio-labs/paris-france/ID/web-developer-expired
-Instead of displaying the job, we need to forward the user to a 404 page. But
-how can we do this as the job is retrieved automatically by the route?
+Em vez de mostrar o emprego, precisamos direcionar o usuário para uma página
+404. Mas como podemos fazer isso se o emprego é retornado automaticamente pela
+rota?
<propel>
-By default, the ~`sfPropelRoute`~ uses the standard `doSelectOne()` method to
-retrieve the object, but you can change it by providing a
-~`method_for_criteria`~ option in the ~route|Route~ configuration:
+Por padrão, o `sfPropelRoute` usa o método padrão `doSelectOne()` para retornar
+o objeto, mas você pode mudá-lo para fornecer uma opção `method_for_criteria`
+na configuração da Rota.
</propel>
[yml]
@@ -823,8 +835,7 @@ retrieve the object, but you can change it by providing a
sf_method: [GET]
<propel>
-The `doSelectActive()` method will receive the `Criteria` object built by the
-route:
+O método `doSelectActive()` irá receber o objeto `Criteria` criado pela rota:
[php]
// lib/model/JobeetJobPeer.php
@@ -842,8 +853,8 @@ route:
}
</propel>
<doctrine>
-The `retrieveActiveJob()` method will receive the `Doctrine_Query` object built
-by the route:
+O método `retrieveActiveJob()` irá receber o objeto `Doctrine_Query` criado
+pela rota:
[php]
// lib/model/doctrine/JobeetJobTable.class.php
@@ -860,29 +871,42 @@ by the route:
}
</doctrine>
-Now, if you try to get an expired job, you will be forwarded to a 404 page.
+Agora, se você tentar acessar um emprego expirado, será direcionado para uma
+página 404.
-![404 for expired job](http://www.symfony-project.org/images/jobeet/1_4/06/exception.png)
+![404 para um emprego expirado](http://www.symfony-project.org/images/jobeet/1_4/06/exception.png)
+
+Link para a Página da Categoria
+-------------------------------
-Link to the Category Page
--------------------------
+Agora, vamos adicionar um link para a página da categoria na página inicial e
+criar a página da categoria.
+
+Mas, espere um minuto. A hora ainda não acabou e nós nem trabalhamos tanto
+assim. Então, você tem bastante tempo livre e conhecimento suficiente para
+implementar isso tudo sozinho. Vamos fazer disso um exercício. Veja amanhã
+como ficou nossa implementação.
+
+Considerações Finais
+--------------------
-Now, let's add a link to the category page on the homepage and create the
-category page.
+Trabalhe em cima da implementação no seu projeto Jobeet local. Por favor, abuse
+da [documentação da API](http://www.symfony-project.org/api/1_4/) online e toda
+a [documentação](http://www.symfony-project.org/doc/1_4/) gratuita disponível
+no site do symfony para te ajudar. Amanhã, daremos a você a solução de como
+implementar essa funcionalidade.
-But, wait a minute. the hour is not yet over and we haven't worked that much.
-So, you have plenty of free time and enough knowledge to implement this all by
-yourself! Let's make an exercise of it. Check back tomorrow for our
-implementation.
+Feedback
+--------
+>**Dica - pt_BR**
+>Este capítulo foi traduzido por **Rogerio Prado de Jesus**.
+>Se encontrar algum erro que deseja corrigir ou quiser fazer algum comentário
+>não deixe de enviar um e-mail para **rogeriopradoj [at] gmail.com**
-Final Thoughts
---------------
+>**Tip - en**
+>This chapter was translated by **Rogerio Prado Jesus**.
+>If you find any errors to be corrected or you have any comments
+>do not hesitate to send an email to **rogeriopradoj [at] gmail.com**
-Do work on an implementation on your local Jobeet project. Please, abuse the
-online [~API~ documentation](http://www.symfony-project.org/api/1_4/) and all
-the free
-[~documentation|Documentation~](http://www.symfony-project.org/doc/1_4/)
-available on the symfony website to help you out. Tomorrow, we will give you the
-solution on how to implement this feature.
__ORM__
Please sign in to comment.
Something went wrong with that request. Please try again.