} }
$this->load->view('home',$data); }
Ele começa fazendo uso do método $this->form_validation- >set_rules() , que permite validar os campos de um formulário e
retornar os erros de preenchimento, evitando que os dados sejam gravados de forma incorreta no banco.
No caso do encurtador, temos apenas um campo para validar, que é o campo address , responsável por receber a URL a ser
encurtada.
O primeiro parâmetro que ele recebe é o nome do campo ( input ) do formulário, o segundo é uma string que identificará o
campo na mensagem de erro (geralmente, usa-se o nome do campo), e o terceiro parâmetro é a lista com os métodos de validação disponibilizados pela library form_validation .
Os métodos de validação são colocados como string, e separados por | (pipe). No encurtador, usamos os seguintes métodos:
required : informa que o campo é obrigatório;
min_length[5] : define um tamanho mínimo de 5
(cinco) caracteres para a string do campo;
max_length[1000] : limita o tamanho máximo de
caracteres a 1.000 (mil);
trim : remove espaços em branco no início e fim da
string recebida.
Após executar o método set_rules() , é hora de chamar um if com a execução do método run() , que faz de fato a validação
do formulário. Se o retorno do método run() for FALSE , então
ocorrerão erros de validação, e estes são recuperados pelo método
$data['error'] com os dados de validation_errors() e $data['short_url'] como null , e então carregamos a view home , passando a variável $data como parâmetro, para que os
dados da variável possam ser recuperados na view.
Tem dúvidas sobre validação de formulários? Que tal refrescar sua memória e revisitar o capítulo 7. Validando formulários para revisar o assunto?
Se não houver erros na validação do formulário, seguimos com o processo de gravação dos dados no banco. Primeiramente, carregamos o model Urls_model através do método $this- >load->model() . Em seguida, populamos a variável $data['address'] com o valor do campo preenchido pelo
usuário, o que foi possível pelo método $this->input->post() .
Veja que o método $this->input->post() recebeu uma
string como parâmetro, e essa string identifica o campo que será recuperado (nesse caso é o campo address ). Tradicionalmente,
em PHP, utiliza-se $_POST , mas o CodeIgniter já possui recursos
próprios para recuperar os dados. DICA
Para recuperar todos os campos de um formulário usando o método $this->input->post() , basta não passar nenhum
parâmetro para ele.
por meio do método $this->session->userdata('logged') . Se
for TRUE , quer dizer que há um usuário logado, e então
recuperamos o id desse usuário com o método $this->session- >userdata('id') .
Tem dúvidas sobre o uso de sessões? Que tal refrescar sua memória e revisitar o capítulo 9. Gerenciando sessões com a library Session para revisar o assunto?
As informações de sessão são geradas no momento que o usuário se loga, e você verá esse processo mais adiante, ainda nesse projeto.
Após todas as verificações e validações, os dados são gravados no banco de dados por meio do método $this->Urls_model- >Save() , que foi criado no model Urls_model . Como parâmetro,
é passada a variável $data , que contém os dados necessários para
gravação no banco.
Esse método retorna o código da URL caso esta tenha sido gravada, ou então retorna FALSE se não foi. Se ocorreu a gravação
dos dados, então a variável $data é populada com informações de
erro e a URL curta, conforme mostra o código a seguir:
...
if($res){
$data['error'] = null;
$data['short_url'] = base_url($res); }else{
$data['error'] = "Não foi possível encurtar a URL."; $data['short_url'] = false;
} ...
É o método responsável por redirecionar a URL curta para a URL original.
Pelo método $this->uri->segment(1) , obtemos o primeiro
nó após a URL base. Caso não tenha sido passado o código da URL curta, o usuário é redirecionado para a home do encurtador. Se foi passado o código, então carregamos o model Urls_model e
executamos o método Fecth() , que vai retornar a URL original
para que seja feito o redirecionamento através do método
redirect() . public function Go() { if (!$this->uri->segment(1)) { redirect(base_url()); } else {
$code = $this->uri->segment(1); $this->load->model('Urls_model');
$result = $this->Urls_model->Fetch($code); if ($result) {
redirect(prep_url($result)); } else {
$data['error'] = "URL não localizada."; $data['short_url'] = null;
$this->load->view('home',$data); }
} }
Veja que está sendo utilizado o método prep_url() e ele está
recebendo $result como parâmetro, que é a URL original
associada ao código da URL curta que foi recuperado na URL. Esse método verifica se a URL possui http:// , e caso não possua, ele
adiciona.
Caso não seja encontrada nenhuma URL associada ao código, será exibida uma mensagem de erro ao carregar a home.
Figura 12.2: Mensagem de erro caso a URL não exista
Concluímos a primeira parte do encurtador de URLs, revimos conceitos aprendidos nos capítulos anteriores, praticamos mais sobre a criação de models e aprendemos a trabalhar com banco de dados. No próximo capítulo, daremos continuidade ao desenvolvimento do encurtador de URLs, e nos capítulos seguintes veremos de maneira mais aprofundada conceitos como: banco de dados e paginação de resultados - que será uma atualização para o encurtador de URLs.
Documentação oficial do CI sobre Models: https://codeigniter.com/user_guide/general/models.ht ml Documentação oficial do CI sobre Banco de Dados: https://codeigniter.com/user_guide/database/index.ht
12.7 CONCLUSÃO
Links úteis
CAPÍTULO 13
"Quando você se compromete com sua visão, você vira profissional." ─ Gabriel Goffi
Até o momento, nós montamos o ambiente, configuramos o banco de dados, criamos as rotas, o controller User , e os models
User e Urls .
Vamos continuar desenvolvendo o nosso encurtador de URLs, e neste capítulo vamos montar a parte dos usuários, com login, alteração de senha e relacionamento da URL encurtada com o usuário.
Crie um arquivo chamado User.php dentro do diretório application/controllers com o código a seguir:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class User extends CI_Controller { }