Silex tutorial, część 2

Po nieco dłuższej przerwie zapraszam do lektury drugiej części tutoriala, w której zajmiemy się routingiem w naszej mini aplikacji. Zapraszam do lektury.

Projektowana aplikacja będzie się składać z trzech podstron:

  • strona główna prezentująca skrócone wpisy – link w postaci http://localhost/silex-tutorial/web/
  • strona dodawania wpisu – http://localhost/silex-tutorial/web/index.php/dodaj
  • strona podglądu pojedynczego wpisu – http://localhost/silex-tutorial/web/index.php/wpis/{id}

Jak widać musimy stworzyć trzy reguły routingu. Silex obsługuje reguły routingu opatre na standardowych metodach HTTP: GET, POST, PUT, DELETE. W naszej aplikacji będziemy korzystać z metod GET i POST.

Obsług poszczególnych metod wygląda następująco:

  • metoda GET
    $app->get('/wzorzec', function () {
        // ...
    });
  • metoda POST
    $app->post('/wzorzec', function () {
        // ...
    });
  • metoda PUT
    $app->put('/wzorzec', function () {
        // ...
    });
  • metoda DELETE
    $app->delete('/wzorzec', function () {
        // ...
    });

Mamy już zatem wiedzę, jak obsługiwać pojedyncze metody HTTP. Co jednak w sytuacji jeżeli chcemy aby dla danego wzorca były obsługiwane zarówno żądania GET i POST. W naszej aplikacji będziemy mieć taką sytuacje przy dodawaniu wpisów do księgi gości.  Twórcy frameworka przewidzieli również taką sytuację. W celu obsługi żądań rówżnych typów należy w miejsce metod get, post itp użyć metody match:

$app->match('/wzorzec', function () {
    // ...
})
->method('GET|POST');

Działanie jest bardzo proste: najpierw definiujemy regułę, a następnie wywołujemy metodę method w której znakiem podajemy jakie metody ma obsługiwać dana reguła routingu, oddzielając je znakiem |.

Aby obsłużyć stronę widoku pojedynczego wpisu potrzebujemy jeszcze dowiedzieć się w jaki sposób przekazać dynamiczny parametr do reguły routingu.

$app->get('/blog/{id}', function ($id) {
    // ...
});

Parametry przekazujemy podając je w nawiasach klamrowych. Do funkcji obsługującej daną regułę przekazujemy zmienną o takiej samej nazwie jak parametr w regule routingu. Zatem jeżeli w regule mamy parametr {id} to do funkcji przekazujemy zmienną $id.

Możemy również wymuszać aby parametry w regule routingu miały określony typ. W naszym przypadku jako ID wpisu powinniśmy zawsze przekazywać liczbę. Jeśli byśmy zamiast liczby przekazali np. ciąg znaków mielibyśmy problem ze znalezieniem wpisu. Zatem należy zabezpieczyć się przed taką sytuacją. W tym celu stosujemy nastepujący kod:

$app->get('/wpis/{id}', function ($id) {
    // ...
})
->assert('id', '\d+');

Wywołujemy metodę assert, która sprawdza czy parametr spełnia określone warunki. Pierwszy argument metody to nazwa parametru routingu, drugi to wzorzec, dla jakiego ma zostać sprawdzona wartość parametru.

Po tym teoretycznym wstępie możemy przystąpić do tworzenia reguł dla naszej aplikacji.

Więcej informacji o routingu w Silexie znajduje się w dokumentacji, zatem zachęcam do poczytania i zapoznania się z zawartymi tam informacjami.

<?php require_once __DIR__.'/../vendor/autoload.php';   $app = new Silex\Application();   $app->get('/', function () {
      return 'Strona glowna';
});
 
$app->get('/dodaj', function () {
      return 'Strona dodawania wpisu';
})->method('GET|POST');
 
$app->get('/wpis/{id}', function ($id) {
      return 'Strona wpisu o ID: ' . $id;
})->assert('id', '\d+');
 
 
 
$app->run();

Jak widać utworzyliśmy trzy reguły routingu, spełniające założenia podane na początku artykułu. Po otwarciu w przeglądarce strony: http://localhost/silex-tutorial/web/ powinniśmy zobaczyć tekst Strona główna, po otwarciu strony http://localhost/silex-tutorial/web/index.php/dodaj zobaczymy tekst Strona dodawania wpisu, a po wpisaniu adresu w postaci http://localhost/silex-tutorial/web/index.php/wpis/XYZ zobaczymy stronę z tekstem Strona wpisu o ID: XYZ (tutaj XYZ musi być liczbą całkowitą – tak jak zdefiniowaliśmy w metodzie assert)

Ten wpis został opublikowany w kategorii Bez kategorii. Dodaj zakładkę do bezpośredniego odnośnika.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *