2013-03-13 16 views
33

Szukam dodać dynamiczne, REST-esque routing do aplikacji PHP. Chciałbym skorzystać z istniejącej biblioteki routingu, więc nie muszę wymyślać koła.Czy istnieje samodzielna biblioteka routingu PHP?

Jednak, gdy patrzę na takie rzeczy, jak Slim i F3, wszystkie zawierają rzeczy, których nie chcę - takie jak szablony i MVC - włączone. Ponieważ chcę tylko routingu, skończyłbym z dużym kodem ramowym w mojej aplikacji, którego nie potrzebuję.

Czy istnieje dobra biblioteka, która obsługuje tylko routing? Czy utknąłem z importowaniem pełnego szkieletu lub odkrywania koła?

+1

Slim nie przychodzi będzie szablon, to dodatek. Gorąco polecam Slim, jeśli chcesz tylko prostego routowania. – Luke

+3

To zamknięte pytanie jest bardzo przydatne. Czy znalazłeś tego dobrego? Tu jestem w tym samym interesie. –

Odpowiedz

26

Spróbuj Klein:

pojedynczy plik autonomiczny i solidny:

"klein.php jest błyskawiczne routera PHP 5.3+"

  • Elastyczne wyrażenie regularne trasy (natchniony przez Sinatra)
  • Zestaw standardowych metod szybkiego tworzenia aplikacji internetowych
  • Almos t żadnych napowietrznych => 2500+ żądań/sekundę

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

+1

Klein wygląda świetnie! – powtac

+4

Wersja 2 Kleina nie jest już pojedynczym plikiem. Jednak wersja 1 jest nadal dostępna tutaj: https://github.com/chriso/klein.php/tree/v1.2.0 –

+2

Kolejna: https://github.com/auraphp/Aura.Router/, nawiasem mówiąc Zobacz także wyniki testu wydajności poniżej wydajności kleina z aurą http://stackoverflow.com/a/21013740/487878 –

5

Try Dispatch : https://github.com/noodlehaus/dispatch

require 'dispatch.php'; 

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

dispatch(); 

Jest to jednoplikowa struktura routingu dla PHP. Bardzo lekki, bardzo łatwy w obsłudze. Ten i Slim są moimi ulubionymi.

Nie potrzebuję w pełni rozwiniętej struktury. Jeśli potrzebujesz ORM, spróbuj Redbean.

Jeśli potrzebujesz silnika szablonów, użyj gałązki Twig.

Dzięki takiemu podejściu wystarczy zainstalować to, czego używasz.

3

Sprawdź Pux (https://github.com/c9s/Pux), który jest ukierunkowany na ekstremalnie wysoką wydajność, zerową zależność, zero narzutów (z obsługą rozszerzenia C). zapewniając jednocześnie dobrą wydajność, Pux zapewnia również Sinatra-jak API, aby zdefiniować własne ścieżki routingu:

 
$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'); 

Benchmark wynik:

  • 48.5x szybsze niż "symfony/routing statyczny" w wysyłanie tras. (z zainstalowanym dodatkiem pux)
  • 31x szybciej niż "symfony/routing" w wysyłaniu wyrażeń regularnych. (z zainstalowanym dodatkiem pux)
  • 69x szybciej niż "klein" (z zainstalowanym rozszerzeniem pux).
 
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 stara się nie zużywają czas obliczeń, aby zbudować wszystkie trasy dynamicznie (jak Symfony/Routing). Zamiast tego, Pux kompiluje twoje trasy do zwykłej tablicy PHP do buforowania, skompilowane trasy mogą być ładowane z pamięci podręcznej bardzo szybko.

Dzięki obsłudze Pux PHP, możesz ładować i wysyłać trasy 1,5 ~ 2x szybciej niż czyste PHP Pux.

+3

Twój test jest bardzo nierealny z tylko jedną prostą trasą. Powinieneś zapewnić nowe 100 tras z prawdziwego świata i lepszą strategię testowania. Każdy, kto rozważa Pux, powinien przeczytać: http://nikic.github.io/2014/02/18/Fast-request-routing-using-regular-expressions.html –

5

Fastroute to autonomiczna biblioteka routingu. Opiera się na modelu OOP i ma pełną strukturę testową. Open Source i licencja są bezpłatne. Jeśli szukasz czegoś, co można zmodyfikować dla swoich własnych projektów, jest to dobre miejsce na rozpoczęcie.

https://github.com/nikic/FastRoute

16

Ze względu na podstarzały odpowiedzi na to pytanie, myślę, że byłoby to bardzo dobry pomysł, aby wymienić kilka bardziej up-to-date rozwiązania sprawy w PO.

W 2 rozwiązania, które przyszło mi do głowy, jak tylko zobaczyłam swój towar pytanie:

Phroute jest zbudowany na bazie FastRoute, dlatego oba wymagają PHP 5.4.

Jeśli potrzebujesz rozwiązania PHP 5.3+, zdecydowanie polecam routing Slim Framework. Jeśli nie chcesz korzystać z żadnej innej funkcjonalności związanej z tą frameworkiem, możesz wyodrębnić części Routingu i używać ich tylko (SLIM ma licencję MIT, więc możesz robić cokolwiek).

Ive użył wąskiego routingu samodzielny, w projekcie moim - DaGhostman \ CodeWave @ github, zobacz tagi < = 2,4, względne części są w Application\Core & Application\Controller.

Powiązane problemy