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.