Criaremos algo bem simples para cadastrar animais favoritos. Aqui você aprederá sobre Rotas, Models, Controllers e Views.
// 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
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');
}
}
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>
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!
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');
}
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
}
?>
Em /app_old/routes.php:
Route::get('/animal/viewAll', 'AnimalController@viewAll');
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
}
?>