Kontynuujemy naukę popularnego frameworka PHP Symfony. Poznajemy resposne i routing. Do dzieła.

Jak mogliśmy zauważyć, w Symfony wszystko jest type-hinted:

#[Route('/hello', name: 'app_hello', methods: ['GET', 'HEAD'])]
    public function index(): Response
    {
        return $this->render('hello/index.html.twig', [
            'controller_name' => 'HelloController',
        ]);
    }

Każda metoda kontrolera zwraca Response, nawet jeżeli robi to poprzez this->render, który dziedziczy z AbstractController.

Zróbmy sobie własny response:

 #[Route('/respond', name: 'app_respond', methods: ['GET', 'HEAD'])]
    public function respond(): Response
    {
        return new Response("Hello!");
    }

HTML też możemy tam wrzucić:

 #[Route('/respond', name: 'app_respond', methods: ['GET', 'HEAD'])]
    public function respond(): Response
    {
        return new Response("<strong>Hello!</strong>");
    }

Dodajmy tablicę do kontrolera:

class HelloController extends AbstractController
{
    private array $names = [
        "John", "Jane", "Jim"
      ];

I kolejny route:

#[Route('/names', name: 'app_names_all', methods: ['GET', 'HEAD'])]
    public function namesAll(): Response
    {
        return new Response(implode(',', $this->names));
    }

Ok, teraz route z parametrem:

#[Route('/names/{id}', name: 'app_show_one', methods: ['GET', 'HEAD'])]
    public function showOne($id): Response
    {
        return new Response($this->names[$id]);
    }

Ok, teraz opcjonalny parametr z domyślną wartością:

#[Route('/nameslimited/{limit?3}', name: 'app_names_all', methods: ['GET', 'HEAD'])]
    public function namesLimited(int $limit): Response
    {
        return new Response(implode(',',array_slice($this->names, 0, $limit)));
    }

Więcej Symfony w następnych lekcjach.