Kontynuujemy poznawanie popularnego frameworka PHP Symfony. Do dzieła!

Ok, rzućmy okiem na kontroler z lekcji poprzedniej:

namespace App\Controller;

//(...)

class HelloController extends AbstractController
{
    //(...)

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

    //(...)

}

Teraz pomyślmy, jakie sposoby daje nam metoda index, aby do niej przekierować ruch z innej metody. Po pierwsze, daje nam route.

Piszemy przekierowanie do route:

#[Route('/redirect_one', name: 'app_redirect_one', methods: ['GET', 'HEAD'])]
    public function redirect_one(): Response
    {
        return $this->redirect('/hello');
    }

Po drugie, daje nam name (odpowiednik ->name w Laravelu). I też możemy tam przekierować ruch:

#[Route('/redirect_two', name: 'app_redirect_two', methods: ['GET', 'HEAD'])]
    public function redirect_two(): Response
    {
        return $this->redirectToRoute('app_hello');
    }

Po trzecie, mamy namespace, nazwę kontrolera oraz metody i skoro framework pod spodem jakoś forwarduje ruch do tego kontrolera, to my też możemy:

#[Route('/redirect_three', name: 'app_redirect_three', methods: ['GET', 'HEAD'])]
    public function redirect_three(): Response
    {
        return $this->forward('App\Controller\HelloController::index');
    }

Warto zwrócić uwagę, że w trzecim wypadku de facto nie mamy przekierowania, tylko forwardowanie do metody kontrolera. Zobaczmy na adres:

http://127.0.0.1:8000/redirect_three

Ok, więcej Symfony w następnych lekcjach.