1. Go to this page and download the library: Download atomdev/odinfmk library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
//Incluindo o autoload do Composer
rk
use Odin\utils\Config;
use Odin\routes\Routes;
Config::init("projeto"); //nome da pasta do seu projeto
Routes::init();
//Rota GET
Routes::get("/", function(){
echo "Primeiro projeto com a Ødin Framework!";
})->name("home");
//Rota POST
Routes::post("/", "Projeto\http\controllers\Classe:metodo");
//Rota PUT
Routes::put("/", "Projeto\http\controllers\Classe:metodo");
//Rota DELETE
Routes::delete("/", "Projeto\http\controllers\Classe:metodo");
//Definindo um grupo de rotas
$instance = Routes::getInstance();
Routes::group("/grupo", function() use ($instance){
Routes::get("/", "Projeto\http\controller\sClasse:metodo");
});
Routes::run();
namespace App\http\controllers; //O namespace master é o de sua preferencia
use Odin\http\controller\Controller;
class Teste extends Controller
{
public function olaMundo()
{
echo "Olá, Mundo";
}
}
### Recuperando valores em rotas dinâmicas no Controller
A Ødin também suporta rotas dinâmicas, ou seja, rotas que contém valores variáveis na estrutura, como no exemplo a seguir.
Routes::get("/filme/:categoria", "App\http\controllers\Filmes:listarPelaCategoria");
Para definir uma parte dinâmica em uma rota você deve utilizar `/:nomeDaVariavel`.
Alguns exemplos de requisição para este tipo de rota seriam:
GET http://localhost/projeto/filme/terror
GET http://localhost/projeto/filme/acao
GET http://localhost/projeto/filme/romance
Para recuperar esse valor passado na rota e utilizá-lo em sua aplicação basta adicionar um parâmetro ao método do Controller.
class Filmes extends Controller
{
public function listarPelaCategoria($categoria)
{
echo $categoria;
}
}
Você também pode definir um padrão a ser passado às variáveis através de um regex, como no exemplo abaixo.
Routes::get("/filme/:id", "App\http\controllers\Filmes:selecionarPeloId", ["id" => "[\d]{1,8}"]);
O regex irá forçar a valor a seguir o padrão, caso contrário, um erro será lançado.
### Redirecionamento de Rotas
Você também pode fazer redirecionamento utilizando a nomenclatura de rotas. Como no exemplo a seguir.
Routes::get("/login", "App\http\controllers\Login:view")->name("loginPage");
Para fazer o redirecionamento basta usar a propriedade `router` no contexto.
$this->router->redirectTo("loginPage");
### Utilizando Views
Como qualquer aplicação MVC, você poderá usar suas views para renderizar elementos visuais, como formulários, listas, etc.
Na Ødin, as views são renderizadas a partir do Controller, mais especificamente dentro do método acionado ao acessar a rota.
Config::init("projeto");
Routes::init();
Routes::get("/login", "App\http\controllers\Login:view");
O Controller buscará pelas Views na pasta `projeto/source/views`.
Para renderizar a view, basta seguir o modelo a baixo.
use Odin\view\View;
class Login extends Controller
{
use View;
public function view()
{
View::render($this, "login_page.php");
}
}
### Parâmetros de `View::render()`
A tabela abaixo mostra os parâmetros que podem ser passado para o método render. Os parâmetros cujo Valor Padrão está vazio significa que deve conter um valor obrigatório.
|NOME|TIPO|VALOR PADRÃO|DESCRIÇÃO|
|----|----|-----|---------|
|`$controller`|`IController`||Instância do Controller|
|`$page` |`string`||Nome do arquivo a carregar|
|`$params` |`array`|`[]`|Valores a serem passados para a View|
|`$hf` |`bool`|`true`|Informa se a View deve ou não renderizar o arquivo de Cabeçalho e Rodapé definidos como padrão|
### Definindo Cabeçalho e Rodapé padrão
Você pode definir um arquivo como header e outro como footer para armazenar informações de contexto global, esses arquivos devem estar na pasta `views`. Como por exemplo o `<head>` e todas as chamadas de CSS de uma página HTML ou `<script>` no final da página. Como mostra o exemplo a seguir.
> `views/header.php`
<!DOCTYPE html>
<html>
<head>
<title>Projeto</title>
<meta charset="utf-8"/>
<link rel="stylesheet" type="text/css" href="./css/bootstrap.css"/>
<link rel="stylesheet" type="text/css" href="./css/style.css"/>
</head>
<body>
> `views/footer.php`
<script src="./js/jquery.js"></script>
<script src="./js/bootstrap.js"></script>
</body>
</html>
> `index.php`
Config::init("projeto");
Routes::init();
Routes::setHF("header.php", "footer.php");
Routes::get("/login", "App\http\controllers\Login:view");
Caso você tenha alguma página que deve carregar um header e um footer específico, você poderá bloquear o carregamento dos arquivos padrão no Controller, como no exemplo abaixo.
public function view()
{
View::render($this, "login_page.php", [], false);
}
### Passando valores do Controller para a View
Você pode compartilhar dados do Controller para a suas Views, por exemplo, os dados parar fazer uma listagem de filmes.
public function listarFilmes()
{
View::render($this, "listar_filmes.php", [
"itens" => ["Filme 1", "Filme 2", "Filme 3"]
]);
}
Na sua view:
<div class="container">
<table class="table table-hover">
<thead>
<tr>
<th>Chave</th>
<th>Filme</th>
</tr>
</thead>
<tbody>
foreach($itens as $i => $item)
{
echo "<tr>";
echo "<td>{$i}</td>";
echo "<td>{$item}</td>";
echo "</tr>";
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.