2013-03-13 9 views
33

Sto cercando di aggiungere un routing dinamico, REST-esque a un'applicazione PHP. Mi piacerebbe usare una libreria di routing esistente, quindi non devo reinventare la ruota.Esiste una libreria di routing PHP autonoma?

Tuttavia, quando guardo cose come Slim e F3, vengono tutte con cose che non voglio - come i modelli e MVC - incluse. Dal momento che voglio solo il routing, mi ritroverei con un sacco di codice framework nella mia applicazione che non ho bisogno.

C'è una buona libreria là fuori che fa solo il routing? O sono bloccato con l'importazione di una struttura completa o reinventare la ruota?

+1

Slim non viene templating, è un componente aggiuntivo. Consiglio vivamente Slim se tutto ciò che desideri è il routing semplice – Luke

+3

Questa domanda chiusa è molto utile. Hai trovato quello buono. Sono dello stesso interesse qui. –

risposta

26

Prova Klein:

singolo file, autonomo e robusto:

"klein.php è un router estremamente veloce per PHP 5.3+"

  • flessibile espressione regolare di routing (ispirato di Sinatra)
  • Un insieme di metodi standard per la creazione rapida di applicazioni Web
  • Almos t non appesantisce => 2500 + richieste/secondo

https://github.com/chriso/klein.php

+1

Klein sembra fantastico! – powtac

+4

La versione 2 di Klein non è più un singolo file. Tuttavia, la versione 1 è ancora disponibile qui: https://github.com/chriso/klein.php/tree/v1.2.0 –

+2

Un altro: https://github.com/auraphp/Aura.Router/, a proposito vedi anche i risultati del benchmark al di sotto delle prestazioni di klein con aura http://stackoverflow.com/a/21013740/487878 –

5

Prova spedizione : https://github.com/noodlehaus/dispatch

require 'dispatch.php'; 

get('/', function() { 
    echo "Hello world!\n"; 
}); 

dispatch(); 

E 'un quadro di routing file singolo per PHP. Molto leggero, molto facile da lavorare. Questo e Slim sono i miei preferiti.

Non ho bisogno di un quadro completo a tutti. Se hai bisogno di un ORM, prova Redbean.

Se è necessario un motore di template, utilizzare Twig.

Con questo approccio è sufficiente installare ciò che si utilizza.

3

Check out Pux (https://github.com/c9s/Pux), che è mirato a prestazioni estremamente elevate, zero dipendenza, overhead (con supporto estensione C). e una buona prestazione, Pux fornisce anche un'API Sinatra-come per voi per definire i propri percorsi di routing:

 
$mux = new Pux\Mux; 
$mux->any('/product', ['ProductController','listAction']); 
$mux->get('/product/:id', ['ProductController','itemAction'] , [ 
    'require' => [ 'id' => '\d+', ], 
    'default' => [ 'id' => '1', ] 
]); 
$mux->post('/product/:id', ['ProductController','updateAction'] , [ 
    'require' => [ 'id' => '\d+', ], 
    'default' => [ 'id' => '1', ] 
]); 
$mux->delete('/product/:id', ['ProductController','deleteAction'] , [ 
    'require' => [ 'id' => '\d+', ], 
    'default' => [ 'id' => '1', ] 
]); 
$route = $mux->dispatch('/product/1'); 

Il risultato del benchmark:

  • 48.5x più veloce di "Symfony/routing" in statica instradamento delle rotte. (con estensione pux installata)
  • 31x più veloce di "symfony/routing" nella distribuzione di espressioni regolari. (con estensione pux installata)
  • 69 volte più veloce di "klein" (con estensione pux installata).
 
n=10000 
Runing php array - . 138796.45654569/s 
Runing pux - . 124982.98519026/s 
Runing klein - . 1801.5070399717/s 
Runing ham - . 13566.734991391/s 
Runing aura - . 39657.986477172/s 
Runing symfony/routing - . 1934.2415677861/s 

        Rate Mem php array pux aura ham symfony/routing klein 
     php array 138.8K/s 0B  ---90% -28% -9%    -1% -1% 
      pux 124.98K/s 0B  111% -- -31%-10%    -1% -1% 
      aura 39.66K/s 0B  349%315% ---34%    -4% -4% 
      ham 13.57K/s 0B  1023%921% 292% --   -14% -13% 
symfony/routing 1.93K/s 786K  7175%6461%2050%701%    -- -93% 
      klein 1.8K/s 262K  7704%6937%2201%753%   107% -- 


================================== Bar Chart ================================== 

     php array 138.8K/s | ████████████████████████████████████████████████████████████ | 
       pux 124.98K/s | ██████████████████████████████████████████████████████  | 
      aura 39.66K/s | █████████████████            | 
       ham 13.57K/s | █████               | 
    symfony/routing 1.93K/s |                | 
      klein 1.8K/s |                | 


============================== System Information ============================== 

PHP Version: 5.5.6 
CPU Brand String: Intel(R) Core(TM) i5-3427U CPU @ 1.80GHz 

With XDebug Extension. 

Pux cerca di non consumare tempo di calcolo per costruire tutte le rotte in modo dinamico (come Symfony/Routing). Invece, Pux compila i tuoi percorsi su un semplice array PHP per il caching, i percorsi compilati possono essere caricati dalla cache molto velocemente.

Con il supporto per estensione PHP Pux, è possibile caricare e inviare i percorsi 1,5 ~ 2 volte più velocemente rispetto a Pux PHP puro.

+3

Il tuo test è estremamente irrealistico con una sola via semplice. Dovresti fornirne uno nuovo con circa 100 rotte del mondo reale e una migliore strategia di test. Chiunque consideri Pux dovrebbe leggere questo: http://nikic.github.io/2014/02/18/Fast-request-routing-using-regular-expressions.html –

5

Fastroute è una libreria di routing indipendente. È basato su un modello OOP e ha una struttura di test completa. Open Source e licenza sono gratuiti. Se stai cercando qualcosa da modificare per i tuoi progetti, questo è un buon punto di partenza.

https://github.com/nikic/FastRoute

16

A causa delle risposte oldish su questa questione penso che sarebbe una buona idea per citare alcune soluzioni più up-to-date al caso nel PO.

Le 2 soluzioni che mi sono venute in mente non appena ho visto la tua domanda ware:

Phroute è costruito su FastRoute, quindi entrambi richiedono PHP 5.4.

Se hai bisogno di una soluzione PHP 5.3+, ti consiglio senz'altro il routing di Slim Framework. Se non si desidera alcuna delle altre funzionalità fornite con il framework, è possibile estrarre le parti di routing e utilizzarle solo (SLIM è autorizzato dal MIT, quindi è consentito fare qualsiasi cosa)

Ive ha utilizzato il routing sottile standalone, in un mio progetto - DaGhostman \ CodeWave @ github, vedere i tag < = 2.4, le relative parti sono in Application\Core & Application\Controller.