Skip to content
Carlos Eduardo edited this page Feb 1, 2017 · 3 revisions

Rotas

Na pasta da aplicação, crie o arquivo routes.php, você pode setar as rotas que desejar. Outra forma usar por annotation.

Exemplo:

routes.php

use \Core\Routes\Router;

// Registrar Erro 404 - Alias para Router::error(404, [...])
Router::notfound([
   'controller' => 'Error',
   'action' => 'index'
]);

// Registrar Erro 403
Router::error(403,[
   'controller' => 'Error',
   'action' => 'denied'
]);

// Registrar rota: padrão: /
Router::main([
   'controller' => 'Main',
   'action'     => 'index'
]);

// Registrar rota: /index, com base na rota padrão
Router::route('/index', Router::main());

// Registrar rota: /entrar
Router::route('/entrar', [
   'controller' => 'Login',
   'action' => 'index'
]);

// Registrar rota: /post/<Parâmetro Numérico>
Router::route('/post/:id',[
   'controller' => 'Main',
   'action' => 'teste'
])->params([
      'id' => '\d+'
]);

// Registrar rota: /post/<Parâmetro Aplfanumérico>
Router::route('/post/:slug',[
   'controller' => 'Main',
   'action' => 'action'
])->params([
   'slug' => '[a-zA-Z0-9\-_]+'
]);

// Registrar rota: /post/<Data no Formato DD-MM-AAAA>/<Parâmetro Aplfanumérico>
Router::route('/post/:date/:slug', [
   'controller' => 'Main',
   'action' => 'pdate'
])->params([
   'date' => '[0-9]{2}-[0-9]{2}-[0-9]{4}',
   'slug' => '[a-zA-Z0-9\-_]+'
]);

Annotations

Por annotation, é gerado um arquivo routes.cache.php, sempre que fizer alteração em uma rota por annotation, é necessário apagar este arquivo para que seja gerado um com as alterações.

A sintaxe é bem simples:

@Route("/caminho-da/rota", {"atributos":"fomato-json"})

Os atributos válidos são:

  • name - Nome da Rota, para identificação e geração de links.
  • params - Parâmetros da URL, Ex: @Route("/post/:slug", {"params":{"slug":"[a-ZA-Z0-9\-_]+"}})
  • allows - Método ["GET", "POST", "PUT", "DELETE", etc..] Padrão: "GET"

Para aplicar as rotas nas actions faça o seguinte:

<?php

namespace Controller;

use \Core\Controller;

class MainController extends Controller {

   /**
    * Página Inicial
    * @Route("/", {"name":"main.index", "allows":"GET"})
    */
   public function index() {
      return 'Página Inicial';
   }

   /**
    * Página Contato
    * @Route("/contato", {"name":"main.contato", "allows":"GET"})
    */
   public function contact() {
      return 'Página Contato';
   }

   /**
    * Post Contato
    * @Route("/contato", {"name":"main.contato.post", "allows":"POST"})
    */
   public function postContact() {
      if ($this->request->post)
         return 'Hello '.$this->request->post['name'];
      else
         return $this->contact();
   }

}