Roteamento com micro framework PIMF php

A estrutura PIMF ajuda a mapear URIs de recursos para um controlador / ação específica. Um aplicativo PIMF invocará a
primeira rota que corresponda ao URI e ao método da solicitação HTTP atual. Se o aplicativo PIMF não encontrar rotas
com URIs que correspondam ao URI e ao método de solicitação HTTP, ele retornará automaticamente uma resposta 404 Não encontrado .

O PIMF apenas mescla variáveis ​​da string de solicitação na mesma matriz de parâmetros onde outras variáveis ​​são armazenadas.
Além disso, há um padrão de rotas padrão que mapeia rotas padrão como este /: controller /: action /: id . Basicamente, você
tem duas opções – usar padrões e rotas personalizadas ou usar apenas personalizadas, o que significa que todas as outras solicitações serão ignoradas.

Rotas personalizadas podem ser definidas em seu routes.php, que fica
no diretório do seu aplicativo.

Configuração de Roteamento

Todas as configurações de roteamento estão em config.app.php no setor de
meta do aplicativo, onde você pode definir as opções de URI personalizadas para o seu aplicativo:

/*
|------------------------------------------------------------------------

| Application meta

|------------------------------------------------------------------------

*/

'app' => array(
'name' => 'MyFirstBlog',
'key' => 'some5secret5key5here', // application key
'default_controller' => 'blog', // the name of the fallback controller
'routeable' => true, // get cleaner URLs or not
'url' => 'http://localhost', // URL used to access your application without a trailing slash.
'index' => '', // if you are using mod_rewrite to get cleaner URLs let it empty otherwise set index.php
'asset_url' => '', // the base URL used for your application's asset files
),

Definindo roteável como falso, você obterá URIs como ” http: // localhost /? Controller = blog & action = show “, caso contrário,
definindo roteável como verdadeiro você obterá URIs mais limpos como ” http: // localhost / blog / show

Restrição de roteamento

Os padrões de rota a seguir são as restrições da estrutura PIMF, que fornecem combinações suficientes para descrever seu aplicativo:

  • /:controlador
  • /: controlador /: ação
  • /: controlador /: ação /: id

Se o nome da classe do controlador for Blog e o nome da ação for searchAction, o PIMF irá mapear / blog / pesquisar automaticamente para ele!

Parâmetros de rota

Você pode incorporar parâmetros em URIs de recursos de rota. Neste exemplo, temos um parâmetro em nosso URI de rota : slug .


// ... if $_SERVER['REQUEST_URI'] => '/blog/search/Barry'

$route
= new PimfRoute('/blog/search/:slug');

$route
->getParams() === array('slug' => 'Barry')

Para criar um parâmetro de URL, acrescente “:” ao nome do parâmetro no padrão de URI de rota. Quando a rota corresponde à solicitação HTTP atual,
os valores para cada parâmetro de rota são extraídos do URI da solicitação HTTP e são passados ​​para o controlador / ação associada em
ordem de aparecimento.

Parâmetros de rota curinga

Você também pode usar parâmetros de rota curinga. Eles capturarão um ou vários segmentos de URI que correspondem ao
parâmetro curinga do padrão de rota em uma matriz. Um parâmetro curinga é identificado por um sufixo “+”; caso contrário, atua da mesma forma que os
parâmetros de rota normais mostrados acima. Aqui está um exemplo:

// ... if $_SERVER['REQUEST_URI'] => '/hello/Barry/White'

$route
= new PimfRoute('/hello/:name+', array('controller'=>'hello'));
$router
= new PimfRouter();
$router
->map($route);
$target
= $router->find();

$target
->getParams() === array('name' => array('Barry', 'White'));

Quando você invoca este aplicativo de exemplo com um URI de recurso “/ hello / Barry / White”, o argumento do nome da rota será igual
a array (‘Barry’, ‘White’).

Condições de rota

O PIMF permite que você atribua condições aos seus parâmetros de rota. Se as condições especificadas não forem atendidas, a rota não será executada.
Por exemplo, se você precisa de uma rota com um segundo segmento que deve ser um ano válido de 4 dígitos, você pode aplicar esta condição desta forma:

$route  = new PimfRoute('/blog/list/:year', array(), array('year' => '(19|20)dd'));

O terceiro parâmetro em Pimf Route é $ conditions, que é uma matriz associativa com chaves que correspondem a qualquer um dos parâmetros e valores da rota que são
expressões regulares.

Parâmetros de rota opcionais

Eles são ideais para usar uma rota para uma listagem de arquivo de blog. Para declarar parâmetros de rota opcionais, especifique seu padrão de rota desta forma:

$route  = new PimfRoute('/blog/list(/:year(/:month(/:day)))');

Cada segmento de rota subsequente é opcional. Esta rota aceitará solicitações HTTP para:

  • /Lista
  • / list / 2010
  • / list / 2010/12
  • / list / 2010/12/05

Atualmente, você só pode usar segmentos de rota opcionais em situações como o exemplo acima, onde cada segmento de rota é
subsequentemente opcional. Você pode achar este recurso instável quando usado em cenários diferentes do exemplo acima.

Redirecionar para rota

É fácil redirecionar o cliente para outro URL com o método do controlador redirect () do aplicativo PIMF . Este método aceita dois
argumentos. O primeiro argumento é a rota como controlador / ação para a qual o cliente redirecionará; Por padrão, o método redirect ()
enviará uma resposta 302 Redirecionamento temporário .

// somewhere at your controller
$this
->redirect('users/show');

Ou se desejar usar um redirecionamento permanente, você deve especificar a rota de destino como o primeiro parâmetro e o segundo parâmetro como verdadeiro .

// somewhere at your controller
$this
->redirect('users/show', true);

Este método definirá automaticamente o cabeçalho Location :. A resposta de redirecionamento HTTP será enviada ao cliente HTTP imediatamente.

Auxiliar de URL de rota

PIMF entrega a você um url de função auxiliar nativa do PHP ($ route = ”, array $ params = array (), $ https = null, $ asset = false) que você pode usar
em seu controlador ou dentro de seus modelos .phtml para calcular o URL desejado:

<a href="<?php echo url('blog/showentry', array('id' => $this->id)) ?>"><?php echo $this->title ?></a>

Confira aqui

https://github.com/gjerokrsteski/pimf-blog