1 Criando um blog com o CodeIgniter

Documentos relacionados
Programação WEB. Prof. André Gustavo Duarte de Almeida www3.ifrn.edu.br/~andrealmeida. Aula II jquery UI

JAVA. Professor: Bruno Toledo

Portal de Sistemas Integrados. Manual do Usuário. Versão: 1.0

APOSTILA DE INFORMÁTICA INTERNET E

Database and Applications. Criação, inserção de dados PHP+MySQL

Cadeira de Tecnologias de Informação. Ano lectivo 2009/2010. Sites dinâmicos. Com Expression Web TI2009/10 EWD_1. Filipa Pires da Silva (2009)

Capítulo 9 - Imagens. Imagens

Para usar com Impressoras multifuncionais (MFPs) ativadas para a Tecnologia Xerox ConnectKey

UTILIZAÇÃO DE RECURSOS AVANÇADOS DO EXCEL EM FINANÇAS (PARTE III): GERENCIAMENTO DE CENÁRIOS

<NOME>ABIAS FRANCISCO DE SOUZA</NOME> <CNPJCPF> </CNPJCPF> <NMATRICULA>101264</NMATRICULA>

UNIVERSIDADE FEDERAL DO VALE DO SÃO FRANCISCO UNIVASF SECRETARIA DE TECNOLOGIA DA INFORMAÇÃO STI DEPARTAMENTO DE SISTEMAS DE INFORMAÇÕES

SISTEMA OPERACIONAL - ANDROID

LEUCOTRON EQUIPAMENTOS LTDA ROTEIRO DE INTERLIGAÇÃO SIP ACTIVE IP COM REGISTRO

Tutorial do aluno Ambiente Virtual de Aprendizagem (AVA) Rede e-tec Brasil

PORTAL JUD

Para entender o conceito de objetos em programação devemos fazer uma analogia com o mundo real:

IBRX Sistemas Eletrônicos. Manual técnico. Configuração: IBRX Módulo portão Rev O IBRX Portão funciona em 4 tipos de conexão:

Passos para a instalação


REITORA Ulrika Arns. VICE-REITOR Almir Barros da Silva Santos Neto. DIRETOR DO NTIC Leonardo Bidese de Pinho

ÁREA DO PROFESSOR (TUTOR)

GUIA DO USUÁRIO AUTOR GECi Gerenciador de eventos científicos

NOVA VERSÃO SAFE DOC MANUAL

Manual de instalação do Microsoft SQL Server 2008 R2 Express no Windows 10

Configuração para Uso do Tablet no GigaChef e Outros Dispositivos

Índice. Manual De instalação ProjectNet Manager

Sistema NetConta I - Guia de Referência Rápida

Manual Mobuss Construção - Móvel

FastCube 2.0 Programmer Manual

Manual Webmail GUIA GERAL UNIVERSIDADE TECNOLÓGIA FEDERAL DO PARANÁ DIRETORIA DE GESTÃO DE TECNOLOGIA DA INFORMAÇÃO - DIRGTI 2015

Treinamento de e-commerce

Prefeitura de Araxá sábado, 11 de setembro de 2015

TCI Sistemas Integrados

Simulado de Linguagem de Programação Java

aplicação arquivo Condições Gerais de Utilização

Manual Básico. Para utilização do Gerenciador de Imóveis

HEMOVIDA (CICLO DO SANGUE - Gerenciamento de estoque para grandes eventos)

SIG-ISS Manual de integração do WebService para NFS-e

MANUAL HAE - WEB MANUAL WEB HAE

Construindo um sistema simples de cadastro de fornecedores em PHP e MySQL.

Este Procedimento Operacional Padrão define as etapas necessárias para o processo de inventário em um estoque, filial ou loja no APLWeb.

Laboratório de Redes de Computadores INSTALANDO SERVIDOR APACHE NOS CENTOS 6.5

Módulo e-rede Magento v1.0. Manual de. Instalação do Módulo. estamos todos ligados

Guia do Administrador de Licenças de Usuários Autorizados do IBM SPSS Modeler IBM

Manual do Desenvolvedor Geração de Tokens

epucc.com.br SAIBA COMO INCLUIR INFORMAÇÕES DE COLABORADORES, CENTROS DE CUSTO E RATEIO DE DESPESAS

Manual do Usuário. VpetConverter Ferramenta para adequação de documentos para Petições Eletrônicas.

Criando scanner para dectar BackupExec vulneráveis ao exploit do Metasploit. Inj3cti0n P4ck3t

Adicionar uma figura, como um botão Submeter, a um formulário

Começando com Zend Framework

Registro de Retenções Tributárias e Pagamentos

Manual do Usuário (Firma Inspetora) Versão 1.8. CMCP - Controle da Marcação Compulsória de Produtos

MANUAL DO PUBLICADOR

ZendWi Presentation 19/10/2012

Parametrização do Banco de Dados PROGRESS Base de Dados Origem

Secretaria de Estado de Meio Ambiente e Desenvolvimento Sustentável - SEMAD. Manual do Usuário

Portal dos Convênios - Siconv

Caso tenha alguma dificuldade nesta etapa, procure um técnico de informática para auxiliá-lo.

Ambiente Virtual de Aprendizagem Moodle 3.0 Orientações Didático-Pedagógicas e Tutoriais. O Ambiente Moodle ferramentas e funcionalidades

Manual de Utilização. Ao acessar o endereço chegaremos a seguinte página de entrada: Tela de Abertura do Sistema

Guia operação site

PROCEDIMENTO INSTALAÇÃO SINAI ALUGUEL

OI CLOUD SEJA BEM-VINDO!

English Português. By erickalves 25 Julho, :08. Devido à política (#) de segurança. Encontrar Blogs Crie o seu blog de graça Ganhe prêmios

Sumário. CEAD - FACEL Manual do Aluno, 02

,QVWDODomR. Dê um duplo clique para abrir o Meu Computador. Dê um duplo clique para abrir o Painel de Controle. Para Adicionar ou Remover programas

Interagindo com Banco de Dados

TUTORIAL PROCESSOS DE INSTALAÇÃO DO MYMIX MOBILE

Gerenciador de Ambiente Laboratorial - GAL Manual do Usuário Módulo Controle de Qualidade Analítico

Assessoria Técnica de Tecnologia da Informação - ATTI. Projeto de Informatização da. Secretaria Municipal de Saúde do. Município de São Paulo

Usando o e a Internet

Banco de Dados. Banco de Dados Parte 2. Alcides Pamplona Alcides Pamplona Linguagem de Programação CESBD 2010

Programação para Web HTML - Parte 2

Declaração de Serviços Tomados

Administração Portal Controle Público

Sistema Integrado de Gerenciamento do ISS SIG-ISS. Manual de integração do WebService para NFS-e

TUTORIAL MATLAB Victor Breder 2016

CRIAÇÃO DE TABELAS NO ACCESS. Criação de Tabelas no Access

Instalação de Carta de Correção Eletrônica Spalla

Boletins Informativos

GUIA DO USUÁRIO PARECERISTA GECi Gerenciador de Eventos Científicos

Tutorial de utilização do Sistema de Abertura de Chamado Sumário

2.1. Incluir uma Proposta de Concessão de Diárias e Passagens PCDP com diárias e passagens.

Procedimento para Adequações às Mudanças Tecnológicas do Módulo Autorizador v4

TUTORIAL DO INSTITUCIONAL

Conceitos de extensões Joomla!

RENOVAÇÃO DE MATRÍCULAS via Controle Acadêmico de Graduação-CAGr

Sistema de Editoração Eletrônica de Revistas (SEER) Open Journal System (OJS) TUTORIAL SUBMISSÃO DE ARTIGOS

TOP 20 ROTINAS QUE VOCÊ PODE AUTOMATIZAR HOJE!

Network Camera. Guia do SNC easy IP setup Versão de software 1.0 Antes de operar o aparelho, leia todo este manual e guarde-o para referência futura.

SISTEMA CAÇA-TALENTOS MANUAL DE OPERAÇÃO PERFIL SECRETARIA

Boletim de Administração Pública Municipal

Guia - Novo sistema de corporativo

Os passos a seguir servirão de guia para utilização da funcionalidade Acordo Financeiro do TOTVS Gestão Financeira.

Gestão Documental. Gestão Documental

Guia de Consulta Rápida. PHP com XML. Juliano Niederauer. Terceira Edição. Novatec

Por que o Wi-Fi cai quando toca o telefone sem fio?

CATÁLOGO DE CUSTOMIZAÇÕES Conferência com Coletores (WEB)

Transcrição:

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 application/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 defined( BASEPATH ) OR exit( No direct script access allowed ); 3 4 class Welcome extends CI_Controller { 5 public function index() 6 { 7 //$this->load->view( welcome_message ); 8 $data[ mensagem ] = "Olá Mundo!!"; 9 $this->load->view( ola_mundo,$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ódigofonte a seguir: 1 <html> 2 <head> 3 <title> 4 <?php echo $mensagem?> 5 </title> 8 <h1><?php echo $mensagem?></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 function 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 framework, que é o arquivo index.php. Se você ainda não incluiu o arquivo.htaccess na pasta-raiz do

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 <IfModule mod_rewrite.c> 2 RewriteEngine On 3 RewriteCond %{REQUEST_FILENAME}!-f 4 RewriteCond %{REQUEST_FILENAME}!-d 5 RewriteRule ^(.*)$ 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 function teste($parametro1, $parametro2){ 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 DATABASE blog /*!40100 DEFAULT CHARACTER 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.postagens ( 2 id int(10) unsigned NOT NULL AUTO_INCREMENT, 3 titulo varchar(255) NOT NULL, 4 texto text NOT NULL, 5 datacadastro timestamp NOT NULL DEFAULT current_timestamp, 6 PRIMARY KEY (id) 7 ) ENGINE=InnoDB DEFAULT CHARSET=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 $autoload[ libraries ] = array( database );

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 $active_group = default ; 2 $query_builder = TRUE; 3 4 $db[ default ] = array( 5 dsn =>, 6 hostname => localhost, 7 username => root, 8 password => admin, 9 database => blog, 10 dbdriver => mysqli, 11 dbprefix =>, 12 pconnect => TRUE, 13 db_debug => TRUE, 14 cache_on => TRUE, 15 cachedir =>, 16 char_set => utf8, 17 dbcollat => utf8_general_ci, 18 swap_pre =>, 19 encrypt => FALSE, 20 compress => FALSE, 21 stricton => FALSE, 22 failover => array(), 23 save_queries => 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 function teste(){ 2 $data[ postagens ] = $this->db->get( postagens )->result(); 3 echo "<pre>"; 4 print_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 function teste(){ 2 $data[ postagens ] = $this->db->get( postagens )->result(); 3 $this->load->view( postagens,$data); 4 }

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: 8 <h2>meu Blog</h2> 9 <? php 10 foreach($postagens as $post){ 11 echo "<h3>". $post->titulo. "</h3>"; 12 echo "<p>". $post->texto. "</p>"; 13 echo "<p>". $post->datacadastro. "</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 framework. Modifique a view postagens.php conforme este código-fonte: 8 <h2>meu Blog</h2> 9 <h3>postagens recentes</h3> 10 <? php 11 foreach($postagens as $post){ 12 $lista_urls[] = anchor(base_url("welcome/detalhes/". $post->id), $post ->titulo; 13 } 14 echo ul($lista_urls); 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 $autoload[ 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:

1 public function detalhes($id){ 2 $this->db->where( id, $id); 3 $data[ postagem ] = $this->db->get( postagens )->result(); 4 $data[ postagens ] = $this->db->get( postagens )->result(); 5 $this->load->view( detalhes_postagem, $data); 6 } E também adicione o método à view detalhes_postagem.php com este código-fonte: 4 <meta charset = "utf-8"> 8 <h2>meu Blog</h2> 9 <h3><?php echo $postagem[0]->titulo?></h3> 10 <p><?php echo $postagem[0]->texto?></p> 11 <p><?php echo $postagem[0]->datacadastro?></p> 12 <h3>postagens recentes</h3> 13 <? php 14 foreach($postagens as $post){ 15 $lista_urls[] = anchor( base_url("welcome/detalhes/". $post->id), $post->titulo); 16 } 17 echo ul($lista_urls); 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[ detalhes/(:num) ] = welcome/detalhes/$1 ; Essa rota encaminha as requisições feitas à detalhes/algum-numero para welcome/detalhes/algumnumero. 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 $lista_urls[] = anchor( base_url("detalhes/". $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(base_url(), " Home "). anchor(base_url("fale-conosco"), " Fale Conosco "); 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:

1 $route[ fale-conosco ] = welcome/fale_conosco ; 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 function fale_conosco(){ 2 $this->load->helper( form ); 3 $this->load->view( fale_conosco ); 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: 8 <? php 9 echo anchor(base_url()," Home "). 10 anchor(base_url("fale-conosco")," Fale Conosco "). 11 heading("meu blog",2). heading("fale Conosco",3); 12 $atributos = array( name => formulario_contato, 13 id => formulario_contato ); 14 echo form_open(base_url( welcome/enviar_mensagem ),$atributos). 15 form_label("nome:","txt_nome"). br(). 16 form_input( txt_nome ). br(). 17 form_label("e-mail:","txt_email"). br(). 18 form_input( txt_email ). br(). 19 form_label("mensagem:","txt_mensagem"). br(). 20 form_textarea( txt_mensagem ). br(). 21 form_submit("btn_enviar","enviar Mensagem"). 22 form_close(); 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 function enviar_mensagem(){ 2 $mensagem = "Nome: ". $this->input->post( txt_nome ). br(); 3 $mensagem.= "E-mail: ". $this->input->post( txt_email ). br(); 4 $mensagem.= "Mensagem: ". $this->input->post( txt_mensagem ).br(); 5 $config[ protocol ] = smtp ; 6 $config[ smtp_host ] = ssl://smtp.googlemail.com ; 7 $config[ smtp_port ] = 465 ; 8 $config[ smtp_timeout ] = 30 ; 9 $config[ smtp_user ] = endereco_que_envia@gmail.com ; 10 $config[ smtp_pass ] = senha_do_email_que_envia ; 11 $config[ charset ] = utf-8 ; 12 $config[ newline ] = "\r\n"; 13 $config[ mailtype ] = html ; 14 $this->load->library( email,$config); 15 $this->email->from("endereco_que_envia@gmail.com","formulário do website "); 16 $this->email->to("email_que_recebe@gmail.com"); 17 $this->email->subject( Assunto do e-mail, enviado pelo CodeIgniter ); 18 $this->email->message($mensagem); 19 if($this->email->send()){

20 $this->load->view( sucesso_envia_contato ); 21 } 22 else{ 23 print_r($this->email->print_debugger()); 24 } 25 } Criando a view sucesso_envia_contato.php: 8 <h3>e-mail enviado com sucesso!!</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 biblioteca 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 defined( BASEPATH ) OR exit( No direct script access allowed ); 3 $config[ protocol ] = smtp ; 4 $config[ smtp_host ] = ssl://smtp.googlemail.com ; 5 $config[ smtp_port ] = 465 ; 6 $config[ smtp_timeout ] = 30 ; 7 $config[ smtp_user ] = endereco_que_envia@gmail.com ; 8 $config[ smtp_pass ] = senha_do_email_que_envia ; 9 $config[ charset ] = utf-8 ; 10 $config[ newline ] = "\r\n"; 11 $config[ mailtype ] = 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.

1.5 Validando formulários Criando um blog com o CodeIgniter 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 function enviar_mensagem(){ 2 $this->load->library( form_validation ); 3 $this->form_validation->set_rules( txt_nome, Nome, required ); 4 $this->form_validation->set_rules( txt_email, Email, required valid_email ); 5 $this->form_validation->set_rules( txt_mensagem, Mensagem, required ); 6 if($this->form_validation->run()){ 7 $mensagem = "Nome: ". $this->input->post( txt_nome ). br(); 8 $mensagem.= "E-mail: ". $this->input->post( txt_email ). br(); 9 $mensagem.= "Mensagem: ". $this->input->post( txt_mensagem ).br(); 10 $this->load->library( email ); 11 $this->email->from("marcelo.mussel@gmail.com","formulário do website"); 12 $this->email->to("marcelo.mussel@gmail.com"); 13 $this->email->subject( Assunto do e-mail, enviado pelo CodeIgniter ); 14 $this->email->message($mensagem); 15 if($this->email->send()){ 16 $this->load->view( sucesso_envia_contato ); 17 } 18 else{ 19 print_r($this->email->print_debugger()); 20 } 21 } 22 else{ 23 $this->fale_conosco(); 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 fornecidas. 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: 8 <? php 9 echo anchor(base_url()," Home "). 10 anchor(base_url("fale-conosco")," Fale Conosco "). 11 heading("meu blog",2). heading("fale Conosco",3); 12 echo validation_errors(); 13 $atributos = array( name => formulario_contato, 14 id => formulario_contato ); 15 echo form_open(base_url( welcome/enviar_mensagem ),$atributos).

16 form_label("nome:","txt_nome"). br(). 17 form_input( txt_nome, set_value( txt_nome )). br(). 18 form_label("e-mail:","txt_email"). br(). 19 form_input( txt_email, set_value( txt_email )). br(). 20 form_label("mensagem:","txt_mensagem"). br(). 21 form_textarea( txt_mensagem, set_value( txt_mensagem )). br(). 22 form_submit("btn_enviar","enviar Mensagem"). 23 form_close(); 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 arquivos 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 $config[ language ] = portuguese-brazilian 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_override ] = welcome/error404 ; Agora basta criar o método error404() no controller Welcome.php 1 public function error404(){ 2 $this->load->view( error404 ); 3 } e criar error404.php conforme este código-fonte: 8 <? php 9 echo anchor(base_url()," Home "). anchor(base_url("fale-conosco"), " Fale Conosco "). heading("meu Blog", 2); 10?> 11 <h3>a página que você está tentando acessar não existe ou seu endereço foi modificado</h3> 12 <a href="javascript:history.go(-1)">voltar</a> 13 </body> 14 </html>

2 continua... Na próxima parte criaremos a área de administração do blog, com opções de adicionar, alterar e excluir registros e adicionar formatação CSS ao blog.