Exemplo prático

O que faremos?

Criaremos algo bem simples para cadastrar animais favoritos. Aqui você aprederá sobre Rotas, Models, Controllers e Views.

1. Criando a rota para cadastro de animais

    
// app/routes.php
Route::get('/animal/add', 'AnimalController@viewAdd');
    
  

Criamos a rota /animal/add e apontamos para o controller AnimalController, colocamos um @ para dizer que, em AnimalController, queremos utilizar o método viewAdd

2. Criando o controller

Em /app_old/controller/ vamos criar o arquivo AnimalController.php e inserir nosso método viewAdd()

      
class AnimalController
{

  public function viewAdd() 
  {
    // Vamos retornar a view animal/add.php:
    return view('animal/viewAdd');
  }

}
      
    

3. Criando a View

Agora, precisamos criar uma View e um formulário.

      
<form method="post" action="/animal/create">
  <input name="name" type="text" placeholder="Qual animal deseja adicionar?">
  <button type="submit">Salvar</button>
</form>
      
    

4. Criando Model

Crie uma tabela com dois campos: id int not null primary_key auto_increment e name varchar, após isso, vamos criar nosso model em /app_old/model/Animal.php

    
class Animal extends Model
{

  /* Atributos, devem ter o mesmo nome das colunas da tabela */
  public $id;
  public $name;

  // nome da tabela
  public static $table = 'animais';

  // campos que devem ser retornados
  public static $fillable = ['id', 'name'];

}
    
  

Pronto, agora já podemos usar os métodos save, find, findOne, where, etc!

5. Criando rota + controller: salvar animal

Em nosso controller vamos adicionar o método create() e também adicionaremos a rota /animal/create.

    
// app/routes.php
Route::post('/animal/create', 'AnimalController@create');
    
  

Agora no controller...

    
public function create($request) 
{
  // Primeiro, vamos dizer para o Harpia que queremos utilizar o Model Animal:
  Core::useModel('Animal');

  // Agora, vamos criar uma instância da classe Animal, passando $request->body (os POSTs ou $_POST)
  $animal = new Animal($request->body);

  // Por fim, vamos salvar esse registro.
  Animal::save($animal); // aqui usamos um método estático e passamos a instância para salvar.

  // Vamos retornar para uma página que exibirá a lista de animais:
  return redirect('@/animal/list');
}
    
  
6. Criando controller + view para exibir lista de animais

Em nosso controller adicionaremos o métoddo viewAll()

    
public function viewAll() 
{
  Core::useModel('Animal');
  $all = Animal::getAll();

  $data = [
    'animals' => $all
  ];

  // Retornando a view e enviando a lista de animais
  return view('animal/viewAll', $data);
}
    
  

Criando a view /app_old/view/animal/viewAll.php

    
<?php
  // Definindo a variável $animals com os valores passados na view.
  // Lembrando: get() retorna um valor passado do controller para a view.
  $animals = get('animals');

  foreach($animals as $animal) {
    ?>
<h2><?= $animal->name ?></h2>
    <?php
  }
?>
    
  
7. Criando a rota para visualizar a lista de animais

Em /app_old/routes.php:

      
Route::get('/animal/viewAll', 'AnimalController@viewAll');
      
    

Pronto! Código final:

Rotas:

      
// app/routes.php
Route::get('/animal/add', 'AnimalController@viewAdd');
Route::post('/animal/create', 'AnimalController@create');
Route::get('/animal/viewAll', 'AnimalController@viewAll');
      
    

Controller:

      
// app/controller/AnimalController.php
class AnimalController
{

  public function viewAdd() 
  {
    // Vamos retornar a view animal/add.php:
    return view('animal/add');
  }

  public function create($request) 
  {
    // Primeiro, vamos dizer para o Harpia que queremos utilizar o Model Animal:
    Core::useModel('Animal');

    // Agora, vamos criar uma instância da classe Animal, passando $request->body (os POSTs ou $_POST)
    $animal = new Animal($request->body);

    // Por fim, vamos salvar esse registro.
    Animal::save($animal); // aqui usamos um método estático e passamos a instância para salvar.

    // Vamos retornar para uma página que exibirá a lista de animais:
    return redirect('@/animal/list');
  }

  public function viewAll() 
  {
    Core::useModel('Animal');
    $all = Animal::getAll();

    $data = [
      'animals' => $all
    ];

    // Retornando a view e enviando a lista de animais
    return view('animal/viewAll', $data);
  }  

}
      
    

Model:

      
// app/model/Animal.php
class Animal extends Model
{

  /* Atributos, devem ter o mesmo nome das colunas da tabela */
  public $id;
  public $name;

  // nome da tabela
  public static $table = 'animais';

  // campos que devem ser retornados
  public static $fillable = ['id', 'name'];

}
      
    

View add:

      
<!-- /app_old/view/viewAdd.php -->
<form method="post" action="/animal/create>
  <input name="name" type="text" placeholder="Qual animal deseja adicionar?">
  <button type="submit">Salvar</button>
</form>
      
    

View de listagem (viewAll):

      
<!-- /app_old/view/viewAll.php -->
<?php
// Definindo a variável $animals com os valores passados na view.
// Lembrando: get() retorna um valor passado do controller para a view.
$animals = get('animals');

foreach($animals as $animal) {
  ?>
<h2><?= $animal->name ?></h2>
  <?php
}
?>