Desconto na compra do livro “CodeIgniter Framework PHP”
30 de agosto de 2010, em Dicas, por Tárcio Zemel
É possível perceber em nossa página Pré-requisitos a importância que atribuímos à leitura de livros “tradicionais” para a obtenção de conhecimento. É possível, sim, obter conhecimentos somente utilizando a internet, lendo e-books, lendo blogs como o CodeIgniter Brasil e assistindo a screencasts. Entretanto, somos da opinião de que o livro de verdade também deve ser um dos pilares para a construção do conhecimento.
E foi pensando nisso que o CodeIgniter Brasil firmou parceria com a Editora Novatec para disponibilizar, com 20% de desconto, o livro “CodeIgniter Framework PHP“!
Como ganhar desconto no livro “CodeIgniter Framework PHP”
Para ganhar 20% de desconto no livro é simples: acesse a página do livro de CodeIgniter, realize os procedimentos tradicionais para compra e, no momento em que for solicitado um código promocional, insira o código CODEIGNITERBRASIL.
Com isso, você tem a oportunidade de adquirir seu exemplar do “CodeIgniter Framework PHP” com 20% de desconto, garantindo a leitura do exemplar por um preço bastante acessível para aprimorar seus conhecimentos em CodeIgniter.
A Novatec gentilmente também disponibilizou um exemplar para que pudéssemos avaliar. Assim que a leitura estiver concluída, será publicado um artigo com as considerações. Fiquem ligados!
Então, a dica sobre CodeIgniter de hoje é: adquiram seu exemplar de “CodeIgniter Framework PHP” com 20% de desconto usando o código CODEIGNITERBRASIL.
Atenção, pois a promoção termina exatamente no fim deste ano de 2010, dia 31/12!
Boa leitura! ;-)
Configuração de rotas (routes) no CodeIgniter
13 de julho de 2010, em Configurações, Passos Iniciais, por Tárcio Zemel

O relacionamento padrão entre uma URL e um Controller no CodeIgniter segue a estrutura exemplo.com/classe/metodo/id/ (como mostrado no artigo sobre Controllers no CodeIgniter), mas, às vezes, é preciso “remapear” este relacionamento. No CodeIgniter, isso é feito através de routes (rotas).
Tomemos como exemplo a visualização de produtos em uma loja virtual. Digamos que a página para visualização dos detalhes de uma cadeira de balanço seja acessada através da URL minhaloja.com/produtos/detalhes/1/2 onde “produtos” é nosso controller; “detalhes” é a função que exibe os detalhes do produto; “1″ seja o código da categoria cadeiras; e “2″ seja o código de nossa cadeira de balanço. Esta estrutura funciona perfeitamente, mas, convenhamos, não é “elegante”.
Configuração de rotas
A configuração de rotas é feita através do arquivo /application/config/routes.php, na instalação padrão do CodeIgniter. Alguns exemplos de configuração de routes:
1 2 3 4 5 6 | // "minhaloja.com/fale-conosco" vai direcionar para o controller "contato" $route['fale-conosco'] = "contato"; // "minhaloja.com/fale-conosco" vai direcionar para o controller "cadastros" // utilizando a função "novo_cliente" $route['cadastro/clientes'] = "cadastros/novo_cliente"; |
Wildcards ou Curingas
Você pode usar curingas (wildcards) para configurar rotas. Desta forma, é possível deixar as URLs mais dinâmicas. Existem 2 tipos de wildcards:
- :num. O wildcard “:num”, utilizado para rotear somente números.
- :any. O curinga “:any”, utilizado para rotear qualquer caractere.
Voltando ao exemplo anterior, que tal transformar a URL “minhaloja.com/produtos/detalhes/1/2″ em “minhaloja.com/1/2/”? Seguindo a estrutura padrão do CodeIgniter, pressupõe-se que se está chamando o controller “1″ e, dentro do controller, a função “2″, o que não existe na prática.
Para resolver o problema, vamos escrever a seguinte rota:
1 | $route[':num/:num'] = "produtos/detalhes"; |
Dessa forma, haverá direcionamento para “produtos/detalhes” sempre que os seguimentos 1 e 2 da URL sejam numéricos.
Exemplo da função detalhes dentro do controller “produtos”:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | class Produtos extends Controller { function Produtos() { parent::Controller(); } function index() { // Função index é acessada quando não for passada nenhuma função para o controller } function detalhes() { echo $this->uri->segment(1); // retorna o código da categoria echo $this->uri->segment(2); // retorna o código do produto } } |
Rotas com expressões regulares
É possível utilizar expressões regulares para definir as rotas no CodeIgniter. Vamos reescrever a rota do nosso exemplo:
1 | $route['(:num)/(:num)'] = "produtos/detalhes/$1/$2"; |
Agora, o controller fica assim:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | class Produtos extends Controller { function Produtos() { parent::Controller(); } function index() { // Função index é acessada quando não for passada nenhuma função para o controller } function detalhes($id_categoria, $id_produto) { echo $id_categoria; // retorna o código da categoria echo $id_produto; // retorna o código do produto } } |
Rotas e SEO
A URL minhaloja.com/1/2/ ficou bem mais curta e elegante, mas não é amigável quando vamos falar de SEO. É muito melhor ter uma estrutura como:
http://minhaloja.com/cadeiras/cadeira-de-balanco/
Esta URL é “amigável” para os motores de busca e, se você tiver, por exemplo, um campo no cadastro de produtos da loja para armazenar o nome da categoria e uma “descrição de URL” (slug) do produto – como “cadeira-de-balanco” -, fica muito fácil. Essa técnica é comumente chamada de URLs amigáveis.
A regra do exemplo é:
1 | $route['(:any)/(:any)'] = "produtos/detalhes/$1/$2"; |
O controller permanece inalterado; só é preciso buscar no banco de dados os produtos com base nos slugs de categoria e produto – caso não saiba como criar slugs, confira o artigo “URLs amigáveis (slug) à WordPress“, do blog desenvolvimento para web.
Rotas reservadas
Existem dois wildcards reservados no CodeIgniter: “welcome” e “scaffolding”. Ou seja, você não poderá utilizar as seguintes rotas em seus projetos:
1 | $route['default_controller'] = 'welcome'; |
E
1 | $route['scaffolding_trigger'] = 'scaffolding'; |
Conclusão
Rotas servem para alterar o relacionamento padrão entre uma URL e um Controller no CodeIgniter. Sabendo utilizar bem os tipos de rotas disponíveis, é possível criar estruturas incríveis, que realmente facilitam o desenvolvimento e acesso a controllers e funções – e o SEO agradece!
Com estas dicas já é possível configurar suas rotas e melhorar a navegação em seus projetos com CodeIgniter.
Espero que tenham gostado deste meu primeiro artigo no CodeIgniter Brasil e fiquem ligados para mais novidades!
Configuração de banco de dados (database) no CodeIgniter
8 de junho de 2010, em Passos Iniciais, por Tárcio Zemel

No artigo sobre instalação e configuração inicial do CodeIgniter, consta que um dos passos é configurar o arquivo próprio para especificar as informações de BD. Apesar de o arquivo ser todo comentado e estruturado de maneira simples, é possível elucidar ainda mais com um artigo explicando como é a configuração de banco de dados (database) no CodeIgniter.
database.php
As configurações de banco de dados no CodeIgniter é feita através do arquivo application/config/database.php. As configurações são armazenadas em um array multidimensional que segue o seguinte padrão:
$db['default']['hostname'] = "localhost"; $db['default']['username'] = "root"; $db['default']['password'] = ""; $db['default']['database'] = "database_name"; $db['default']['dbdriver'] = "mysql"; $db['default']['dbprefix'] = ""; $db['default']['pconnect'] = TRUE; $db['default']['db_debug'] = FALSE; $db['default']['cache_on'] = FALSE; $db['default']['cachedir'] = ""; $db['default']['char_set'] = "utf8"; $db['default']['dbcollat'] = "utf8_general_ci"; |
Existe um motivo principal para essas informações serem armazenadas em um array multidimensional: a facilidade do CodeIgniter chega a tal ponto que trabalhar com múltiplos bancos de dados é, literalmente, tão simples quanto montar um array, ou seja, se for preciso trabalhar com vários BDs (um para produção, outro para testes, mais um para homologação, etc), basta criar mais um array com as respectivas informações!
Se, por exemplo, além das configurações “default”, fosse preciso trabalhar com um banco de testes, algo do tipo poderia ser feito:
$db['teste']['hostname'] = "localhost"; $db['teste']['username'] = "root"; $db['teste']['password'] = "123456"; $db['teste']['database'] = "database_name"; $db['teste']['dbdriver'] = "mysql"; $db['teste']['dbprefix'] = ""; $db['teste']['pconnect'] = TRUE; $db['teste']['db_debug'] = FALSE; $db['teste']['cache_on'] = FALSE; $db['teste']['cachedir'] = ""; $db['teste']['char_set'] = "utf8"; $db['teste']['dbcollat'] = "utf8_general_ci"; |
Então, a variável $active_group permite escolher os grupos de conexão que estarão ativos – por padrão, somente o “default” está ativo.
Explicação dos valores
Como é possível ver, existem diversos valores no array, cada um prestando a servir determinada funcionalidade nas configurações de bancos de dados:
- hostname. O hostname para a conexão (costuma ser “localhost”).
- username. O nome de usuário usado para a conexão ao BD.
- password. A senha necessária para se conectar ao banco.
- database. O nome do banco de dados que se deseja conectar.
- dbdriver. O tipo de banco de dados (mysql, postgres, odbc, etc).
- dbprefix. Um parâmetro (opcional) que especifica prefixo para as tabelas. Especialmente útil quando se usa Active Records (que será explicado futuramente), permitindo múltiplas instalações do CI usarem um mesmo database.
- pconnect. TRUE ou FALSE, especifica se vai ser usado persistent connection no projeto.
- db_debug. TRUE ou FALSE, serve para mostrar ou não os erros de queries que possam vir a ocorrer.
- cache_on. TRUE ou FALSE, marca se o database query caching (abordado em artigos futuros) será usado.
- cachedir. Quando se usa o database query caching, é o caminho para o diretório de cache.
- char_set. O character set usado para as comunicações com o banco.
- dbcollat. O collation usado para se comunicar com o BD.
- port. Opção usada somente com Postgres driver. Para usar a configuração, é necessário acrescentar mais uma linha ao array de configuração do database (ex. $db['default']['port'] = 5432;).
Palavras finais sobre configuração de bancos de dados
Dependendo da plataforma de banco de dados você está usando (MySQL, Postgres, etc), nem todos os valores do array de configuração serão necessários. Por exemplo, se estiver usando SQLite você não precisará fornecer um nome de usuário ou senha, e o nome do banco de dados será o caminho para o arquivo de banco de dados. Por padrão (e os exemplos apresentados) foram conforme o que se usa para bancos MySQL.
Reforçando ainda mais o fato de que o CodeIgniter é o melhor framework PHP, configurar um ou mais bancos de dados é tão simples quanto escrever algumas breves linhas de códigos. Somando este conhecimento ao básico sobre models e como fazer models, views e controllers trabalharem juntos no CodeIgniter, já é possível esboçar os primeiros “projetos de verdade”!
Vamos lá? ;-)

