Como desenvolver MVC modular para web. Básico com CodeIgniter. (Parte 2/4)

Objetivo – Parte 2

Com tudo o que você precisa configurado, bora colocar a mão na massa! Agora você aprenderá a instanciar e salvar no banco de dados os treinadores e os pokémons!

Esta é a segunda parte do tutorial. Se deseja ver a primeira, terceira e quarta parte, os links estão logo abaixo:


4. Criar a navegação do projeto

Vamos criar agora a página onde ficarão os treinadores! A seguir será criada a controller que já resultará numa rota padrão para ela.

A URL da rota da controller “Trainers” será assim:
servidor/aplicação/controller
http://myphpcontainer-phelip931321.codeanyapp.com/ci/trainers

O que define essa rota de navegação é o nome da controller e, por usarmos o HMVC, do módulo, também. Então, vamos criar o módulo e controller para o nossa sessão de “posts”.

Crie os diretórios:

  • application/modules/trainers/
  • application/modules/trainers/controllers/

Agora crie o arquivo da controller:

<?php
class Trainers extends CI_Controller {
 public function index () {
  echo 'Hello Pallet Town!';
 }
}

Este arquivo contém o básico de um controller do CodeIgniter. É uma nova classe que extende o CI_Controller, do core do CodeIgniter, e os métodos públicos, como o index(),  são os acessíveis pelas URLs.

Uma boa explicação teórica do que é o MVC pode ser encontrada no canal do Tableless. Tableless um site e uma excelente fonte de bom material didático e prático para o desenvolvimento de aplicações web. Recomendo que o visite se deseja se aprofundar mais na área de desenvolvimento, principalmente se for front-end.
( http://tableless.com.br/ )

Para esta aula, não vou me ater as explicações do que é conceitualmente o MVC. Portanto, bora para os códigos.

4.1 Recebendo argumentos

Mais para frente, você verá necessidade de obter parâmetros a partir do usuário. Um modo mais simples e intuitivo do que utilizar a variável “$_GET” do PHP é através da passagem de parâmetros suportada pelo próprio framework.

A URL para isso segue a seguinte estrutura:
servidor/aplicação/controller/method/parameters
http://myphpcontainer-phelip931321.codeanyapp.com/ci/trainers/index/Arkham

Teste o seguinte código e acesse a URL com diferentes parâmetros para ver o funcionamento:

<?php
class Trainers extends CI_Controller {
 public function index ($city = 'Pallet Town') {
  echo "Hello $city!";
 }
}

 


5. Query Builder (Active-Record)

O Query Builder do CodeIgniter faz parte da biblioteca “Database” e é a solução do framework para manipular um banco de dados relacional e montar queries das mais diversas. Caso queira, confira a documentação oficial sobre o “Query Builder Class.

Neste tutorial, ensinarei apenas as funções mais básicas, que fazem parte do sessão “Model“, da documentação. Nesta sessão, são exemplificados o uso dos métodos “get”, “insert”, “delete” e “update”.

Tudo será feito, primeiramente, na Controller, apenas para efeito didático. Lembrando que o correto, em quase 100% da vezes, é fazer qualquer tipo de comunicação com o banco de dados a partir das Models, e não a partir das Controllers.

Abaixo está a estrutura do banco de dados que importamos na “Parte 1”.

Database - Pokémon

 

5.1. Insert

Para nosso exemplo, vamos adicionar dois treinadores. Um deles é o Ash, que a maioria das pessoas lembram e gostam, por causa do desenho. O outro é o Red, o grande mestre Pokémon, que não fica torrando a bicicleta da Misty e ganha o respeito dos lendários. (o cara da capa da “Parte 1” é o Red)

Dentro da sua controller, em um novo método chamado “insert()”, crie um vetor para seu novo treinador e o adicione:

http://myphpcontainer-phelip931321.codeanyapp.com/ci/trainers/insert

(...)
public function insert () {
 // Load database library
 $this->load->database();
 
 $trainer_1 = [];
 $trainer_1['name'] = 'Red';
 $trainer_1['description'] = 'O treinador mais incrível de todos.';
 $trainer_1['money'] = 999999;
 $trainer_1['discovered_pokemons'] = 720;
 $this->db->insert('trainers', $trainer_1);
 
 $trainer_2 = [];
 $trainer_2['name'] = 'Ash';
 $trainer_2['description'] = 'O Pikachu é melhor do que ele.';
 $trainer_2['money'] = 10;
 $trainer_2['discovered_pokemons'] = 15;
 $this->db->insert('trainers', $trainer_2);
}
(...)

Pronto, acabamos de adicionar dois registros (treinadores) a partir de dados de um vetor.

 

5.2. Delete

Agora vamos deletar o Ash, ele é muito ruim. Todo começo de temporada ele fica fraco de novo e apanha pra qualquer Pokémon selvagem que ele encontra.

O comando a seguir apaga um registro de uma tabela com base no nome:

http://myphpcontainer-phelip931321.codeanyapp.com/ci/trainers/remove

(...)
public function remove () {
 // Load database library
 $this->load->database();
 $this->db->delete('trainers', array('name'=>'Ash'));
}
(...)

 

5.3. Update

Vamos mudar a descrição do perfil do Red. Ele foi o grande campeão da Liga Pokémon, então vamos atribuir isso a descrição dele:

http://myphpcontainer-phelip931321.codeanyapp.com/ci/trainers/update

(...)
public function update () {
 // Load database library
 $this->load->database();

 $this->db->update(
  // Nome da tabela
  'trainers',

  // O que será alterado
  array('description'=>'É o grande campeão da Liga Pokémon!'),

  // A regra para selecionar o que será atualizado
  array('name'=>'Red')
 );
}
(...)

 

5.4. Get (Select)

Agora vamos obter todos os dados do Red e exibí-los.

http://myphpcontainer-phelip931321.codeanyapp.com/ci/trainers/get

(...)
public function get () {
 // Load database library
 $this->load->database();

 // Filter and request to database
 $this->db->where('name', 'Red');
 $trainers = $this->db->get('trainers');

 // For each element into $trainers->result()
 foreach ($trainers->result() as $trainer) {
  // Print trainer's data and add a break-line
  echo 'Name: ' . $trainer->name . '';
  echo 'Description: ' . $trainer->description . '';
  echo '

<hr>


';
 }
}
(...)

 

Ae, sensacional! Agora você sabe manipular o banco de dados usando o Query Builder! Adeus SQL!

Próximo passo é aprender a receber os dados do usuário!

 


I para a Parte 3