Sie sind auf Seite 1von 10

Criando um blog com o CodeIgniter

Prof. Marcelo C. Mussel


1 Criando um blog com o CodeIgniter
1.1 Criando e acessando métodos nos controladores
Nesta seção vamos ver os primeiros passos na prática com o CodeIgniter. Após descompactá-lo em
uma pasta do seu servidor local acessando a URL relativa a essa pasta, você visualizará a página de
boas-vindas do framework.
Essa tela é o resultado da execução do método index() do controller Welcome.php da pasta ap-
plication/controllers. O método index() simplesmente carrega a view welcome_message.php. Vamos
alterar o código do controller Welcome.php para este código fonte:
1 <? php
2 d e f i n e d( ’ B A S E P A T H ’) OR exit ( ’ No direct script access a l l o w e d ’) ;
3

4 class W e l c o m e e x t e n d s C I _ C o n t r o l l e r {
5 public f u n c t i o n index ()
6 {
7 // $this - > load - > view ( ’ w e l c o m e _ m e s s a g e ’) ;
8 $data [ ’ m e n s a g e m ’] = " Olá Mundo !! ";
9 $this - > load - > view ( ’ o l a _ m u n d o ’ , $data ) ;
10 }
Note que não é necessário fechar o arquivo PHP com ?>; de fato, é uma boa prática não fazê-lo,
evitando assim a possibilidade de erro na interpretação em função de algum espaço ou alguma quebra
de linha após o ?>. Isso não é um requisito do framework, apenas uma boa prática da escrita do PHP.
Você verá que os arquivos do framework não são fechados com ?>.
Após modificar o controller, crie um arquivo chamado ola_mundo.php na pasta views com o código-
fonte a seguir:
1 < html >
2 < head >
3 < title >
4 <? php echo $ m e n s a g e m ? >
5 </ title >
6 </ head >
7 < body >
8 <h1 > <? php echo $ m e n s a g e m ? > </h1 >
9 </ body >
10 </ html >
Note que o controller não tem um construtor, mas ainda assim é possível acessar a instância do
$this do framework; isso ocorre porque, ao declarar a classe, foram herdadas as características de um
controller por meio da instrução extends CI_Controller, e isso faz com que o framework entenda que
a classe Welcome.php é um controller.
Na linha $data[’mensagem’] = ”Olá Mundo”; criamos de maneira implícita um array com o índice
mensagem e o valor Olá mundo. Posteriormente, passamos essa variável para a view ao adicionar o array
com um parâmetro ao carregar a view em $this->load->view(’ola_mundo’,$data);
Esse é o modo como passamos dados dos controllers para as views, podendo ser um simples array
com um único índice ou um array multidimensional com várias dimensões de dados.
O próximo exercício é ainda mais simples. Adicione ao mesmo controller Welcome.php um novo
método chamado teste() com esse código-fonte:
1 public f u n c t i o n teste () {
2 echo " Isto é apenas um teste " ;
3 }
O objetivo desse teste é entender como acessar esse método. Para visualizar o resultado desse
código, você deve acessar o endereço completo, conforme esta URL:
http://localhost/CodeIgniter/index.php/welcome/teste.
Note no endereço que estamos indicando o caminho completo incluindo o front controller do fra-
mework, que é o arquivo index.php. Se você ainda não incluiu o arquivo .htaccess na pasta-raiz do
Criando um blog com o CodeIgniter
Prof. Marcelo C. Mussel
projeto e tentar retirar o index.php da URL, você verá a mensagem de erro HTTP 404, do Apache,
não do framework.
Para corrigir o carregamento do framework sem precisar digitar o index.php, basta adicionar o
arquivo .htaccess conforme já exposto. Adicione este código a um arquivo chamado .htaccess e salve-o
na pasta-raiz da aplicação:
1 < I f M o d u l e m o d _ r e w r i t e .c >
2 R e w r i t e E n g i n e On
3 R e w r i t e C o n d %{ R E Q U E S T _ F I L E N A M E } ! -f
4 R e w r i t e C o n d %{ R E Q U E S T _ F I L E N A M E } ! -d
5 R e w r i t e R u l e ^(.*) $ index . php ? $1 [ L ]
6 </ IfModule >
Ao fazer isso, você conseguirá acessar o método teste() sem precisar digitar o segmento index.php
da URL. Caso você adicione o arquivo .htaccess e continue vendo o mesmo erro HTTP 404 de página
não encontrada do Apache, certifique-se que o módulo mod_rewrite está sendo carregado; você pode
fazer isso usando a função phpinfo() do PHP.
Você também pode passar parâmetros para os métodos por meio das URLs. Para testar essa
funcionalidade, vamos alterar o método teste() para este código-fonte:
1 public f u n c t i o n teste ( $parametro1 , $ p a r a m e t r o 2) {
2 echo $parametro1;
3 echo " < br / >" ;
4 echo $parametro2;
5 }
Agora o método recebe dois parâmetros por meio da URL e mostra o texto informado nos parâ-
metros no navegador. Basta adicionar duas strings à URL para testar, como por exemplo a URL
http://localhost/CodeIgniter/welcome/teste/Iron/Maiden

1.2 Criando e conectando o banco de dados


O primeiro passo é criar o banco de dados que utilizaremos para o blog. Para essa tarefa, basta
usar o software de sua preferência e executar este comando SQL:
1 CREATE D A T A B A S E blog /* !40100 D E F A U L T C H A R A C T E R SET utf8 */ ;
Com o banco de dados já criado, vamos adicionar a tabela que armazenará os dados das postagens.
Esta tabela deve ter um campo para o título, um para a data em que a postagem foi criada e um para
o texto da postagem. Também é de praxe ter um campo do tipo ID, autonumeração e chave primária
da tabela. Veja neste script SQL o comando para criar a tabela:
1 CREATE TABLE blog . p o s t a g e n s (
2 id int (10) u n s i g n e d NOT NULL A U T O _ I N C REM ENT ,
3 titulo v a r c h a r (255) NOT NULL ,
4 texto text NOT NULL ,
5 d a t a C a d a s t r o t i m e s t a m p NOT NULL D E F A U L T c u r r e n t _ t i mes tamp ,
6 P R I M A R Y KEY ( id )
7 ) ENGINE = InnoDB D E F A U L T C H A R S E T= utf8 ;
Observe que o mapa de caracteres escolhido tanto para o banco de dados quanto para a tabela é o
UTF-8, o qual dá suporte a caracteres como cedilha, acentuação etc.
Antes de conectar o CodeIgniter ao banco de dados, é conveniente adicionar algum conteúdo fictício
ao blog, pelo menos duas ou três entradas de dados para ter com o que fazer os primeiros testes. Faça
isso adicionando registros à tabela postagens utilizando qualquer um dos programas para manipulação
de dados mencionados anteriormente.
Então o próximo passo é conectar o CodeIgniter ao banco de dados. Para isso, primeiro é necessário
carregar a biblioteca de conexão a banco de dados; faremos isso adicionando a biblioteca ao arquivo
de configuração autoload.php. Localize a variável que recebe o array de libraries e adicione database
assim:
1 $ a u t o l o a d[ ’ l i b r a r i e s ’] = array ( ’ d a t a b a s e ’) ;
Criando um blog com o CodeIgniter
Prof. Marcelo C. Mussel
Outras bibliotecas serão adicionadas mais tarde, mas neste momento precisamos apenas desta. Ao
tentar acessar o website neste momento, verá uma página de erro indicando que não foram informados
os parâmetros de conexão com um banco de dados.
Para corrigir o erro, devemos adicionar os parâmetros de conexão ao arquivo de configuração
database.php. Note este exemplo:
1 $ a c t i v e _ g r o u p = ’ d e f a u l t ’;
2 $ q u e r y _ b u i l d e r = TRUE ;
3

4 $db [ ’ d e f a u l t ’] = array (
5 ’ dsn ’ => ’’,
6 ’hostname’ => ’localhost’,
7 ’ u s e r n a m e ’ = > ’ root ’ ,
8 ’ p a s s w o r d ’ = > ’ admin ’ ,
9 ’ d a t a b a s e ’ = > ’ blog ’ ,
10 ’ d b d r i v e r ’ = > ’ mysqli ’ ,
11 ’dbprefix’ => ’’,
12 ’ p c o n n e c t ’ = > TRUE ,
13 ’ d b _ d e b u g ’ = > TRUE ,
14 ’ c a c h e _ o n ’ = > TRUE ,
15 ’cachedir’ => ’’,
16 ’ c h a r _ s e t ’ = > ’ utf8 ’ ,
17 ’dbcollat’ => ’utf8_general_ci’,
18 ’swap_pre’ => ’’,
19 ’ e n c r y p t ’ = > FALSE ,
20 ’ c o m p r e s s ’ = > FALSE ,
21 ’ s t r i c t o n ’ = > FALSE ,
22 ’ f a i l o v e r ’ = > array () ,
23 ’ s a v e _ q u e r i e s ’ = > TRUE
24 );
Alguns parâmetros já vêm preenchidos com valores-padrão, que são os mais comuns e provavelmente
se encaixarão bem nesta aplicação de exemplo, bastando na prática adicionar o servidor, o banco de
dados, o usuário e a senha.

1.3 Recuperando informações do banco de dados


Vamos alterar o controller Welcome.php em seu método teste() conforme este código-fonte:
1 public f u n c t i o n teste () {
2 $data [ ’ p o s t a g e n s ’] = $this - >db - > get ( ’ p o s t a g e n s ’) -> result () ;
3 echo " < pre > " ;
4 p r i n t _ r( $data ) ;
5 }
Agora, ao acessar a URL http://localhost/CodeIgniter/welcome/teste você verá na tela do seu
navegador os dados previamente cadastrados em nosso BD.
Nesse código estamos utilizando o método get() da classe de banco de dados db para recuperar a
tabela inteira. É possível adicionar cláusulas where, limitar o número de registros exibidos, ordenar os
resultados etc. O método result() retorna o resultado da consulta, mas é possível acessar o método
get() diretamente, e você terá acesso a outras informações sobre a tabela, a conexão etc.
Agora que já temos acesso aos dados da tabela, vamos alterar o método para que isso seja passado
para uma view e que ela seja carregada. Altere novamente o método teste() do controller Welcome.php
conforme este trecho de código:
1 public f u n c t i o n teste () {
2 $data [ ’ p o s t a g e n s ’] = $this - > db - > get ( ’ p o s t a g e n s ’) -> result () ;
3 $this - > load - > view ( ’ p o s t a g e n s ’, $data ) ;
4 }
Criando um blog com o CodeIgniter
Prof. Marcelo C. Mussel
Agora, em vez de mostrar o retorno do banco de dados diretamente com o print_r do PHP,
vamos carregar uma view e iterar pelos registros. Para isso, crie o arquivo postagens.php na pasta
applications/views com este código-fonte:
1 <! D O C T Y P E html >
2 < html lang = " pt - br " >
3 < head >
4 < meta c h a r s e t=" utf -8 " >
5 < title > Meu Blog </ title >
6 </ head >
7 < body >
8 <h2 > Meu Blog </ h2 >
9 <? php
10 f o r e a c h( $ p o s t a g e n s as $post ) {
11 echo " <h3 > " . $post - > titulo . " </h3 > " ;
12 echo " <p > " . $post - > texto . " </p > " ;
13 echo " <p > " . $post - > d a t a C a d a s t r o . " </p > " ;
14 echo " <hr > " ;
15 }
16 ?>
17 </ body >
18 </ html >
Note que o código é uma simples mescla de HTML com um bloco PHP que itera pela variável
$postagens. Essa variável foi passada pelo array $data no controlador ao carregar a view. Além das
postagens do blog, podemos passar outros valores se necessário.
Vamos fazer algumas modificações nesta view para testar mais algumas funcionalidades do fra-
mework. Modifique a view postagens.php conforme este código-fonte:
1 <! D O C T Y P E html >
2 < html lang = " pt - br " >
3 < head >
4 < meta c h a r s e t=" utf -8 " >
5 < title > Meu Blog </ title >
6 </ head >
7 < body >
8 <h2 > Meu Blog </ h2 >
9 <h3 > P o s t a g e n s recentes </ h3 >
10 <? php
11 f o r e a c h( $ p o s t a g e n s as $post ) {
12 $ l i s t a _ u r l s [] = anchor ( b a s e _ u r l(" w e l c o m e/ d e t a l h e s/ " . $post - > id ) , $post
- > titulo ;
13 }
14 echo ul ( $ l i s t a _ u r l s) ;
15 ?>
16 </ body >
17 </ html >
Esta modificação faz com que cada uma das postagens gere um hyperlink para o método detalhes()
que construiremos a seguir. Note que estamos iterando pelos registros recebidos do banco de dados com
o laço foreach() do PHP, guardando as URLs no array $lista_urls e utilizando a função anchor()
do CodeIgniter para gerar os hyperlinks e a função ul() para gerar uma lista HTML.
Essas funções dependem do URL Helper e do HTML Helper para que estejam disponíveis. Vamos
carregar os helpers, e como são recursos de uso frequente, é preferível adicioná-los ao arquivo de
configuração autoload.php; procure pelo índice helper da variável $autoloade adicione os helpers
assim:
1 $ a u t o l o a d[ ’ helper ’] = array ( ’ url ’ , ’ html ’) ;
Agora, cada uma das linhas da lista mostra um link para alguma postagem do blog. O próximo
passo é construir um método que mostre os detalhes da postagem. Para isso, adicione o método
detalhes() ao controller Welcome.php conforme este código fonte:
Criando um blog com o CodeIgniter
Prof. Marcelo C. Mussel
1 public f u n c t i o n d e t a l h e s( $id ) {
2 $this - >db - > where ( ’ id ’ , $id ) ;
3 $data [ ’ p o s t a g e m ’] = $this - >db - > get ( ’ p o s t a g e n s ’) -> result () ;
4 $data [ ’ p o s t a g e n s ’] = $this - > db - > get ( ’ p o s t a g e n s ’) -> result () ;
5 $this - > load - > view ( ’ d e t a l h e s _ p o s t a g e m ’, $data ) ;
6 }
E também adicione o método à view detalhes_postagem.php com este código-fonte:
1 <! D O C T Y P E html >
2 < html lang = " pt - br " >
3 < head >
4 < meta c h a r s e t = " utf -8 " >
5 < title > Meu Blog </ title >
6 </ head >
7 < body >
8 <h2 > Meu Blog </ h2 >
9 <h3 > <? php echo $ p o s t a g e m [0] - > titulo ? > </ h3 >
10 <p > <? php echo $ p o s t a g e m [0] - > texto ? > </p >
11 <p > <? php echo $ p o s t a g e m [0] - > d a t a C a d a s t r o ? > </p >
12 <h3 > P o s t a g e n s recentes </ h3 >
13 <? php
14 f o r e a c h( $ p o s t a g e n s as $post ) {
15 $ l i s t a _ u r l s [] = anchor ( b a s e _ u r l(" w e l c o m e/ d e t a l h e s/ " . $post - > id ) ,
$post - > titulo ) ;
16 }
17 echo ul ( $ l i s t a _ u r l s) ;
18 ?>
19 </ body >
20 </ html >
Para fazer com que o site esteja acessível já ao acessar a home, altere o nome do método teste()
para index() e exclua ou comente o antigo método index(). Assim, ao acessar a raiz do site, você
terá acesso aos links das postagens.
Para tornar a URL das postagens mais curta e amigável, vamos alterar o endereço com o auxílio
de uma rota; adicione esta linha ao arquivo de configuração routes.php:
1 $route [ ’ d e t a l h e s /(: num ) ’] = ’ w e l c o m e/ d e t a l h e s/ $1 ’;
Essa rota encaminha as requisições feitas à detalhes/algum-numero para welcome/detalhes/algum-
numero.
Sendo assim, basta alterar os arquivos das views postagens.php e detalhes_postagens.php para que
o link seja gerado conforme esse novo formato de URL, modificando a linha que gera os links para este
formato:
1 $ l i s t a _ u r l s [] = anchor ( b a s e _ u r l(" d e t a l h e s/ " . $post - > id ) , $post - > titulo ) ;
Agora os links estão sendo gerados de modo mais curto e amigável. Os links antigos continuam
funcionando como anteriormente.

1.4 Criando formulários e enviando emails


Vamos modificar as views postagens.php e detalhes_postagens.php acrescentando dois novos links,
conforme trecho de código após a tag <body>:
1 <? php
2 echo anchor ( b a s e _ u r l () , " Home " ) . anchor ( b a s e _ u r l(" fale - c o n o s c o") , "
Fale C o n o s c o ") ;
3 ?>
Isso criará um link para a home e um link para uma página de contato que ainda não existe.
Esta página de contato mostrará ao visitante um formulário para que ele possa enviar mensagens ao
administrador do blog. Vamos acrescentar mais uma rota ao arquivo routes.php assim:
Criando um blog com o CodeIgniter
Prof. Marcelo C. Mussel
1 $route [ ’ fale - c o n o s c o ’] = ’ w e l c o m e/ f a l e _ c o n o s c o ’;
Ou seja, ao acessar o link fale-conosco, o visitante será direcionado para o método fale_conosco()
do controller Welcome.php. Acrescente este código-fonte para criar o método:
1 public f u n c t i o n f a l e _ c o n o s c o () {
2 $this - > load - > helper ( ’ form ’) ;
3 $this - > load - > view ( ’ f a l e _ c o n o s c o ’) ;
4 }
Para o link funcionar, falta ainda criar a view com o formulário e depois o método que fará o envio
da mensagem.
Acrescente esse código-fonte ao arquivo da view fale_conosco.php:
1 <! D O C T Y P E html >
2 < html lang = " pt - br " >
3 < head >
4 < meta c h a r s e t=" utf -8 " >
5 < title > Meu Blog </ title >
6 </ head >
7 < body >
8 <? php
9 echo anchor ( b a s e _ u r l () ," Home " ) .
10 anchor ( b a s e _ u r l(" fale - c o n o s c o") ," Fale C o n o s c o " ) .
11 h e a d i n g( " Meu blog " ,2) . h e a d i n g(" Fale C o n o s c o" ,3) ;
12 $ a t r i b u t o s = array ( ’ name ’ = > ’ f o r m u l a r i o _ c o n t a t o ’,
13 ’ id ’ = > ’ f o r m u l a r i o _ c o n t a t o ’) ;
14 echo f o r m _ o p e n ( b a s e _ u r l( ’ w e l c o m e/ e n v i a r _ m e n s a g e m ’) , $ a t r i b u t o s) .
15 f o r m _ l a b e l ( " Nome : " ," t x t _ n o m e" ) . br () .
16 f o r m _ i n p u t ( ’ t x t _ n o m e ’) . br () .
17 f o r m _ l a b e l ( "E - mail : " ," t x t _ e m a i l") . br () .
18 f o r m _ i n p u t ( ’ t x t _ e m a i l ’) . br () .
19 f o r m _ l a b e l ( " M e n s a g e m: " ," t x t _ m e n s a g e m ") . br () .
20 f o r m _ t e x t a r e a ( ’ t x t _ m e n s a g e m ’) . br () .
21 f o r m _ s u b m i t (" b t n _ e n v i a r" ," Enviar M e n s a g e m" ) .
22 f o r m _ c l o s e () ;
23 ?>
24 </ body >
25 </ html >
Para proceder o envio da mensagem, é necessário criar o método enviar_mensagem() no controller
Welcome.php conforme este código fonte:
1 public f u n c t i o n e n v i a r _ m e n s a g e m () {
2 $ m e n s a g e m = " Nome : " . $this - > input - > post ( ’ t x t _ n o m e ’) . br () ;
3 $ m e n s a g e m .= " E - mail : " . $this - > input - > post ( ’ t x t _ e m a i l ’) . br () ;
4 $ m e n s a g e m .= " M e n s a g e m: " . $this - > input - > post ( ’ t x t _ m e n s a g e m ’) . br () ;
5 $ c o n f i g[ ’ p r o t o c o l ’] = ’ smtp ’;
6 $ c o n f i g[ ’ s m t p _ h o s t ’] = ’ ssl :// smtp . g o o g l e m a i l. com ’;
7 $ c o n f i g[ ’ s m t p _ p o r t ’] = ’ 465 ’;
8 $ c o n f i g[ ’ s m t p _ t i m e o u t ’] = ’ 30 ’;
9 $ c o n f i g[ ’ s m t p _ u s e r ’] = ’ e n d e r e c o _ q u e _ e n v i a @ g m a i l . com ’;
10 $ c o n f i g[ ’ s m t p _ p a s s ’] = ’ s e n h a _ d o _ e m a i l _ q u e _ e n v i a ’;
11 $ c o n f i g[ ’ c h a r s e t ’] = ’utf -8 ’;
12 $ c o n f i g[ ’ n e w l i n e ’] = " \ r \ n " ;
13 $ c o n f i g[ ’ m a i l t y p e ’] = ’ html ’;
14 $this - > load - > l i b r a r y( ’ email ’ , $ c o n f i g) ;
15 $this - > email - > from (" e n d e r e c o _ q u e _ e n v i a @ g m a i l . com " ," F o r m u l á r i o do w e b s i t e
");
16 $this - > email - > to (" e m a i l _ q u e _ r e c e b e @ g m a i l . com" ) ;
17 $this - > email - > s u b j e c t( ’ A s s u n t o do e - mail , e n v i a d o pelo C o d e I g n i t e r ’) ;
18 $this - > email - > m e s s a g e( $ m e n s a g e m) ;
19 if ( $this - > email - > send () ) {
Criando um blog com o CodeIgniter
Prof. Marcelo C. Mussel
20 $this - > load - > view ( ’ s u c e s s o _ e n v i a _ c o n t a t o ’) ;
21 }
22 else {
23 p r i n t _ r( $this - > email - > p r i n t _ d e b u g g e r () ) ;
24 }
25 }
Criando a view sucesso_envia_contato.php:
1 <! D O C T Y P E html >
2 < html lang = " pt - br " >
3 < head >
4 < meta c h a r s e t=" utf -8 " >
5 < title > Meu Blog </ title >
6 </ head >
7 < body >
8 <h3 >E - mail e n v i a d o com s u c e s s o !! </ h3 >
9 </ body >
10 </ html >
No método enviar_mensagem() listado acima, existem três coisas importantes a se observar.
A primeira delas, que serve para qualquer situação que receba dados por meio de formulários, é
que não utilizamos o tradicional $_POST[’nome_do_campo’] para receber os valores do formulário, mas
sim $this->input->post(’nome_do_campo’); isso é importante sob o aspecto da segurança, pois o
CodeIgniter realiza verificações de segurança nesse método que impedem, entre outras coisas, ataques
do tipo SQL Injection ao website.
Outro aspecto importante nesse método é o modo como estamos carregando a biblioteca que faz o
envio do email. Houve épocas em que era comum enviar emails de servidores sem nenhuma validação
ou autenticação, porém, com o crescente abuso no envio de spam e possíveis malwares, praticamente
nenhum servidor aceita emails que não sejam verificados e autenticados, portanto é necessário validar
o envio dos emails encaminhados. Assim, para encaminhar corretamente o e-mail ao carregar a biblio-
teca em $this->load->library(’email’,$config;, estamos passando o array $config com diversas
instruções de configuração. Note que essas configurações mudam de acordo com o servidor de email
utilizado; este é um exemplo utilizando as configurações de uma conta pessoal do Gmail.
Por fim, temos o método que efetivamente dispara o envio do email, $this->email->send(). Com
um simples if(), podemos verificar se o email foi encaminhado ou não. Se sim, o framework carrega
a view sucesso_envia_contato.php; caso contrário, as mensagens de erro são exibidas utilizando o
método $this->email->print_debugger() da biblioteca Email.
É importante observar também que, caso uma biblioteca seja utilizada em vários lugares da sua
aplicação, é preferível adicionar as variáveis de configuração a um arquivo na pasta application/config.
Para fazer isso, basta que o arquivo de configuração coincida com o nome da biblioteca; neste caso,
email.php. Este trecho de código exemplifica como ficaria o arquivo:
1 <? php
2 d e f i n e d( ’ B A S E P A T H ’) OR exit ( ’ No direct script access a l l o w e d ’) ;
3 $ c o n f i g[ ’ p r o t o c o l ’] = ’ smtp ’;
4 $ c o n f i g[ ’ s m t p _ h o s t ’] = ’ ssl :// smtp . g o o g l e m a i l. com ’;
5 $ c o n f i g[ ’ s m t p _ p o r t ’] = ’ 465 ’;
6 $ c o n f i g[ ’ s m t p _ t i m e o u t ’] = ’ 30 ’;
7 $ c o n f i g[ ’ s m t p _ u s e r ’] = ’ e n d e r e c o _ q u e _ e n v i a @ g m a i l . com ’;
8 $ c o n f i g[ ’ s m t p _ p a s s ’] = ’ s e n h a _ d o _ e m a i l _ q u e _ e n v i a ’;
9 $ c o n f i g[ ’ c h a r s e t ’] = ’utf -8 ’;
10 $ c o n f i g[ ’ n e w l i n e ’] = " \ r \ n " ;
11 $ c o n f i g[ ’ m a i l t y p e ’] = ’ html ’;
Note que dessa maneira não é necessário passar a variável com o array $config ao carregar a
biblioteca, pois o CodeIgniter entende que, existindo o arquivo de configuração para uma biblioteca,
ele deve assumir o conteúdo do arquivo por padrão.
Havendo necessidade de carregar configurações diferentes em métodos diferentes, basta sobrescrever
o array fazendo a carga de variáveis diferentes em um array de configuração diretamente no método.
Criando um blog com o CodeIgniter
Prof. Marcelo C. Mussel
1.5 Validando formulários
O CodeIgniter dispõe de uma biblioteca que auxilia na construção de um sistema de validação de
formulários robusto. Essa validação é feita no lado do servidor e não depende de JavaScript, que pode
estar desabilitado dependendo do dispositivo que está acessando o site ou a aplicação.
A primeira providência é alterar o método enviar_mensagem(), conforme segue:
1 public f u n c t i o n e n v i a r _ m e n s a g e m () {
2 $this - > load - > l i b r a r y( ’ f o r m _ v a l i d a t i o n ’) ;
3 $this - > f o r m _ v a l ida tion - > s e t _ r u l e s( ’ t x t _ n o m e ’ , ’ Nome ’ , ’ r e q u i r e d ’) ;
4 $this - > f o r m _ v a l ida tion - > s e t _ r u l e s( ’ t x t _ e m a i l ’, ’ Email ’ , ’ r e q u i r e d|
v a l i d _ e m a i l ’) ;
5 $this - > f o r m _ v a l ida tion - > s e t _ r u l e s( ’ t x t _ m e n s a g e m ’, ’ M e n s a g e m ’ , ’ r e q u i r e d ’) ;
6 if ( $this - > f o r m _ v a l ida tion - > run () ) {
7 $ m e n s a g e m = " Nome : " . $this - > input - > post ( ’ t x t _ n o m e ’) . br () ;
8 $ m e n s a g e m .= " E - mail : " . $this - > input - > post ( ’ t x t _ e m a i l ’) . br () ;
9 $ m e n s a g e m .= " M e n s a g e m: " . $this - > input - > post ( ’ t x t _ m e n s a g e m ’) . br () ;
10 $this - > load - > l i b r a r y( ’ email ’) ;
11 $this - > email - > from (" m a r c e l o. m u s s e l @ g m a i l. com" ," F o r m u l á r i o do w e b s i t e" ) ;
12 $this - > email - > to (" m a r c e l o. m u s s e l @ g m a i l . com ") ;
13 $this - > email - > s u b j e c t( ’ A s s u n t o do e - mail , e n v i a d o pelo C o d e I g n i t e r ’) ;
14 $this - > email - > m e s s a g e( $ m e n s a g e m) ;
15 if ( $this - > email - > send () ) {
16 $this - > load - > view ( ’ s u c e s s o _ e n v i a _ c o n t a t o ’) ;
17 }
18 else {
19 p r i n t _ r( $this - > email - > p r i n t _ d e b u g g e r () ) ;
20 }
21 }
22 else {
23 $this - > f a l e _ c o n o s c o () ;
24 }
25 }
A lógica por trás da validação é muito simples. Carrega-se a biblioteca form_validation em
$this->load->library(’form_validation’); e, então, as regras de validação do formulário são for-
necidas.
Checamos se estas foram atendidas em $this->form_validation->run(), que retorna TRUE em
caso positivo e FALSE em caso negativo. Se foram atendidas, basta proceder o envio da mensagem do
mesmo modo como havíamos feito antes; se não, o método que exibe o formulário é invocado novamente
com $this->fale_conosco().
Agora, vamos alterar a view com o formulário para que mostre as mensagens de erro e para que
preencha automaticamente os valores já informados nos campos. Dessa forma, ao enviar um formulário
incompleto, o usuário não perde os campos que já foram corretamente preenchidos. Altere a view
fale_conosco.php conforme esse código:
1 <! D O C T Y P E html >
2 < html lang = " pt - br " >
3 < head >
4 < meta c h a r s e t=" utf -8 " >
5 < title > Meu Blog </ title >
6 </ head >
7 < body >
8 <? php
9 echo anchor ( b a s e _ u r l () ," Home " ) .
10 anchor ( b a s e _ u r l(" fale - c o n o s c o") ," Fale C o n o s c o " ) .
11 h e a d i n g( " Meu blog " ,2) . h e a d i n g(" Fale C o n o s c o" ,3) ;
12 echo v a l i d a t i o n _ e r r o r s () ;
13 $ a t r i b u t o s = array ( ’ name ’ = > ’ f o r m u l a r i o _ c o n t a t o ’,
14 ’ id ’ = > ’ f o r m u l a r i o _ c o n t a t o ’) ;
15 echo f o r m _ o p e n ( b a s e _ u r l( ’ w e l c o m e/ e n v i a r _ m e n s a g e m ’) , $ a t r i b u t o s) .
Criando um blog com o CodeIgniter
Prof. Marcelo C. Mussel
16 f o r m _ l a b e l(" Nome : " ," t x t _ n o m e" ) . br () .
17 f o r m _ i n p u t( ’ t x t _ n o m e ’ , s e t _ v a l u e( ’ t x t _ n o m e ’) ) . br () .
18 f o r m _ l a b e l(" E - mail : " ," t x t _ e m a i l" ) . br () .
19 f o r m _ i n p u t( ’ t x t _ e m a i l ’ , s e t _ v a l u e( ’ t x t _ e m a i l ’) ) . br () .
20 f o r m _ l a b e l(" M e n s a g e m: " ," t x t _ m e n s a g e m ") . br () .
21 f o r m _ t e x t a r e a ( ’ t x t _ m e n s a g e m ’, s e t _ v a l u e( ’ t x t _ m e n s a g e m ’) ) . br () .
22 f o r m _ s u b m i t (" b t n _ e n v i a r" ," Enviar M e n s a g e m") .
23 f o r m _ c l o s e () ;
24 ?>
25 </ body >
26 </ html >

1.6 Traduzindo as mensagens de validação do formulário


Para fazer com que as mensagens de validação do formulário, as mensagens de erro e os alertas ao
usuário sejam exibidas em português, são necessárias duas ações:
Primeiro faça o download da tradução dos arquivos de linguagem (https://github.com/bcit-ci/codeigniter
e adicione uma pasta chamada pt-BR à application/language. A pasta deve conter os mesmos arqui-
vos encontrados na pasta system/language/english. Atenção: você não deve adicionar a tradução em
system/language, mas sim em application/language.
O segundo passo é alterar o arquivo de configuração config.php em application/config para que a
linguagem coincida com o nome da pasta; no caso, portuguese-brazilian:
1 $ c o n f i g[ ’ l a n g u a g e ’] = ’ portuguese - b r a z i l i a n ’

1.7 Alterando a página de erro 404


Para apresentar mensagens personalizadas de erros para páginas ausentes ou links incorretos, no
arquivo routes.php altere a variável 404_override para que o usuário seja direcionado à sua página
personalizada de erro desta forma:
1 $route [ ’ 404 _ o v e r r i d e ’] = ’ w e l c o m e/ e r r o r 4 0 4 ’;
Agora basta criar o método error404() no controller Welcome.php
1 public f u n c t i o n e r r o r 4 0 4 () {
2 $this - > load - > view ( ’ e r r o r 4 0 4 ’) ;
3 }
e criar error404.php conforme este código-fonte:
1 <! D O C T Y P E html >
2 < html lang = " pt - br " >
3 < head >
4 < meta c h a r s e t=" utf -8 " >
5 < title > Meu Blog </ title >
6 </ head >
7 < body >
8 <? php
9 echo anchor ( b a s e _ u r l () ," Home " ) . anchor ( b a s e _ u r l(" fale - c o n o s c o") , "
Fale C o n o s c o ") . h e a d i n g( " Meu Blog " , 2) ;
10 ?>
11 <h3 > A página que você está t e n t a n d o a c e s s a r não existe ou seu e n d e r e ç o
foi modificado </ h3 >
12 <a href = " j a v a s c r i p t: h i s t o r y. go ( -1) " > Voltar </a >
13 </ body >
14 </ html >
Criando um blog com o CodeIgniter
Prof. Marcelo C. Mussel
2 continua ...

Na próxima parte criaremos a área de adminis-


tração do blog, com opções de adicionar, alterar
e excluir registros e adicionar formatação CSS ao
blog.

Das könnte Ihnen auch gefallen