• Nenhum resultado encontrado

} }

$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 { }

CRIANDO UM

ENCURTADOR DE URLS ─