this code is the basic of the base and rotue of symfony project, In this function onAuthenticationSuccess I have the following code to check if the user has a certain role and then i tried to redirect him to the right path, but it seems to be not working, is there another way to do that?,
We will then create a user class, by using the make:user command – this command will create a User class for security and it will automatically update the security.yaml. :
`base
<!DOCTYPE html>
{% block title %}Welcome!{% endblock %}
⚫️">
{# Run `composer require symfony/webpack-encore-bundle` to start using Symfony UX #}
{% block stylesheets %}
{% endblock %}
{% block javascripts %}
{% endblock %}
</head>
<body>
{% block body %}{% endblock %}
</body>
admin base:
{% extends 'base.html.twig' %}
{% block body %}
<div class="container">
<div calss="row">
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container-fluid">
<a class="navbar-brand" href="{{ path('app_admin')}}">Home</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" aria-current="page" href="{{ path('app_instructeur_new') }}">Add instructeur</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ path('app_mededelingen_new') }}">Add mededelingen</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ path('app_admin_contact') }}">Contant</a>
</li>
</ul>
<ul class="navbar-nav ms-auto">
{% if is_granted('ROLE_ADMIN')%}
<li class="nav-item">
<a class="nav-link " href="{{ path('app_logout') }}">You are logged in as
admin {{app.user.username}}, Uitloggen</a>
</li>
{% endif %}
</ul>
</div>
</div>
</nav>
</div>
<div class="row">
<div class="col-sm-4 d-none d-sm-block">
<div class="card">
<img src="{{ asset('images/Autorijles-banner.jpg')}}" class="card-img-top" alt="..." height="200">
<div class="card-body">
</div>
</div>
</div>
<div class="col-sm-4 d-none d-sm-block">
<div class="card">
<img src="{{ asset('images/Autorijles-banner-2.jpg')}}" class="card-img-top" alt="..." height="200">
<div class="card-body">
</div>
</div>
</div>
<div class="col-sm-4 d-none d-sm-block">
<div class="card">
<img src="{{ asset('images/cars.jpg')}}" class="card-img-top" alt="..." height="200">
<div class="card-body">
</div>
</div>
</div>
</div>
{% block content %}{% endblock %}
<footer class="mt-5 p-3 text-center">
<div class="footer container-fluid bg-dark text-light">
<i class="bi bi-instagram float-end img-thumbnail text-dark"></i>
<i class="bi bi-facebook float-end img-thumbnail text-dark"></i>
<i class="bi bi-youtube float-end img-thumbnail text-dark"></i>
<p class="text-center py-2 mb-0">Copyright © 2023 Designed by
<a href="#" rel="noopener noreferre">@Alkatlabe</a>
</p>
</div>
</footer>
</div>
{% endblock %}
bezoeker base:
{% extends 'base.html.twig' %}
{% block body %}
<div class="container">
<div calss="row">
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container-fluid">
<a class="navbar-brand" href="{{ path('app_bezoeker')}}">Home</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" aria-current="page" href="#">Service</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ path('app_contact')}}">Contact</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ path('app_voorwaarden')}}">Voorwaarden</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ path('app_register')}}">Register</a>
</li>
</ul>
<ul class="navbar-nav ms-auto">
<li class="nav-item">
<a class="nav-link " href="{{ path('app_login') }}">Login</a>
</li>
</ul>
</div>
</div>
</nav>
</div>
<div class="row">
<div class="col-sm-4 d-none d-sm-block">
<div class="card">
<img src="{{ asset('images/Autorijles-banner.jpg')}}" class="card-img-top" alt="..." height="200">
<div class="card-body">
</div>
</div>
</div>
<div class="col-sm-4 d-none d-sm-block">
<div class="card">
<img src="{{ asset('images/Autorijles-banner-2.jpg')}}" class="card-img-top" alt="..." height="200">
<div class="card-body">
</div>
</div>
</div>
<div class="col-sm-4 d-none d-sm-block">
<div class="card">
<img src="{{ asset('images/cars.jpg')}}" class="card-img-top" alt="..." height="200">
<div class="card-body">
</div>
</div>
</div>
</div>
{% block content %}{% endblock %}
<footer class="mt-5 p-3 text-center">
<div class="footer container-fluid bg-dark text-light">
<i class="bi bi-instagram float-end img-thumbnail text-dark"></i>
<i class="bi bi-facebook float-end img-thumbnail text-dark"></i>
<i class="bi bi-youtube float-end img-thumbnail text-dark"></i>
<p class="text-center py-2 mb-0">Copyright © 2023 Designed by
<a href="#" rel="noopener noreferre">@Alkatlabe</a>
</p>
</div>
</footer>
</div>
{% endblock %}
instractur or page
{% extends 'base.html.twig' %}
{% block body %}
<div class="container">
<div calss="row">
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container-fluid">
<a class="navbar-brand" href="{{ path('app_instructeur')}}">Home</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" aria-current="page" href="{{ path('app_rijlessen_index') }}">Rijlessen</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ path('app_ziekmelding_new') }}">Ziek melden</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ path('app_dagrooster') }}">Dagrooster</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ path('app_instructeur_contact') }}">Contact</a>
</li>
</ul>
<ul class="navbar-nav ms-auto">
{% if is_granted('ROLE_INSTRUCTEUR')%}
<li class="nav-item">
<a class="nav-link " href="{{ path('app_logout') }}">You are logged in as
instructeur {{app.user.username}}, Uitloggen</a>
</li>
{% endif %}
</ul>
</div>
</div>
</nav>
</div>
<div class="row">
<div class="col-sm-4 d-none d-sm-block">
<div class="card">
<img src="{{ asset('images/Autorijles-banner.jpg')}}" class="card-img-top" alt="..." height="200">
<div class="card-body">
</div>
</div>
</div>
<div class="col-sm-4 d-none d-sm-block">
<div class="card">
<img src="{{ asset('images/Autorijles-banner-2.jpg')}}" class="card-img-top" alt="..." height="200">
<div class="card-body">
</div>
</div>
</div>
<div class="col-sm-4 d-none d-sm-block">
<div class="card">
<img src="{{ asset('images/cars.jpg')}}" class="card-img-top" alt="..." height="200">
<div class="card-body">
</div>
</div>
</div>
</div>
{% block content %}{% endblock %}
<footer class="mt-5 p-3 text-center">
<div class="footer container-fluid bg-dark text-light">
<i class="bi bi-instagram float-end img-thumbnail text-dark"></i>
<i class="bi bi-facebook float-end img-thumbnail text-dark"></i>
<i class="bi bi-youtube float-end img-thumbnail text-dark"></i>
<p class="text-center py-2 mb-0">Copyright © 2023 Designed by
<a href="#" rel="noopener noreferre">@Alkatlabe</a>
</p>
</div>
</footer>
</div>
{% endblock %}
member user base
{% extends 'base.html.twig' %}
{% block body %}
<div class="container">
<div calss="row">
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container-fluid">
<a class="navbar-brand" href="{{ path('app_member')}}">Home</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" aria-current="page" href="{{ path('app_rijles_member') }}">Rijlessen</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ path('app_member_contact')}}">Contant</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ path('app_user_index', {id: app.user.id})}}">Profile</a>
</li>
</ul>
<ul class="navbar-nav ms-auto">
{% if is_granted('ROLE_MEMBER')%}
<li class="nav-item">
<a class="nav-link " href="{{ path('app_logout') }}">You are logged in as
member {{app.user.username}}, Uitloggen</a>
</li>
{% endif %}
</ul>
</div>
</div>
</nav>
</div>
<div class="row">
<div class="col-sm-4 d-none d-sm-block">
<div class="card">
<img src="{{ asset('images/Autorijles-banner.jpg')}}" class="card-img-top" alt="..." height="200">
<div class="card-body">
</div>
</div>
</div>
<div class="col-sm-4 d-none d-sm-block">
<div class="card">
<img src="{{ asset('images/Autorijles-banner-2.jpg')}}" class="card-img-top" alt="..." height="200">
<div class="card-body">
</div>
</div>
</div>
<div class="col-sm-4 d-none d-sm-block">
<div class="card">
<img src="{{ asset('images/cars.jpg')}}" class="card-img-top" alt="..." height="200">
<div class="card-body">
</div>
</div>
</div>
</div>
{% block content %}{% endblock %}
<footer class="mt-5 p-3 text-center">
<div class="footer container-fluid bg-dark text-light">
<i class="bi bi-instagram float-end img-thumbnail text-dark"></i>
<i class="bi bi-facebook float-end img-thumbnail text-dark"></i>
<i class="bi bi-youtube float-end img-thumbnail text-dark"></i>
<p class="text-center py-2 mb-0">Copyright © 2023 Designed by
<a href="#" rel="noopener noreferre">@Alkatlabe</a>
</p>
</div>
</footer>
</div>
{% endblock %}
controllars:
admin:
<?php
namespace AppController;
use AppEntityMededelingen;
use AppEntityUser;
use AppFormMededelingenType;
use AppFormUserType;
use AppRepositoryMededelingenRepository;
use AppRepositoryUserRepository;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentPasswordHasherHasherUserPasswordHasherInterface;
use SymfonyComponentRoutingAnnotationRoute;
class AdminController extends AbstractController
{
#[Route('/admin', name: 'app_admin')]
public function index(): Response
{
return $this->render('admin/index.html.twig', [
'controller_name' => 'AdminController',
]);
}
#[Route('admin/contact', name: 'app_admin_contact')]
public function contact(): Response
{
return $this->render('admin/contact.html.twig', [
'controller_name' => 'AdminController',
]);
}
#[Route('admin/instructeur/new', name: 'app_instructeur_new', methods: ['GET', 'POST'])]
public function newInstructeur(Request $request, UserRepository $userRepository, UserPasswordHasherInterface $userPasswordHasher): Response
{
$user = new User();
$form = $this->createForm(UserType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$user->setPassword(
$userPasswordHasher->hashPassword(
$user,
$form->get('password')->getData()
)
);
$user->setRoles(['ROLE_INSTRUCTEUR']);
$userRepository->save($user, true);
return $this->redirectToRoute('app_admin', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('admin/newInstructeur.html.twig', [
'user' => $user,
'form' => $form,
]);
}
#[Route('admin/mededeling/new', name: 'app_mededelingen_new', methods: ['GET', 'POST'])]
public function new(Request $request, MededelingenRepository $mededelingenRepository): Response
{
$mededelingen = new Mededelingen();
$form = $this->createForm(MededelingenType::class, $mededelingen);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$mededelingen->setAdmin($this->getUser());
$mededelingenRepository->save($mededelingen, true);
return $this->redirectToRoute('app_admin', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('admin/newMededeling.html.twig', [
'mededelingen' => $mededelingen,
'form' => $form,
]);
}
}
bezoekres
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAnnotationRoute;
class BezoekerController extends AbstractController
{
#[Route('/bezoeker', name: 'app_bezoeker')]
public function index(): Response
{
return $this->render('bezoeker/index.html.twig', [
'controller_name' => 'BezoekerController',
]);
}
#[Route('bezoeker/voorwaarden', name: 'app_voorwaarden')]
public function voorwaarden(): Response
{
return $this->render('bezoeker/voorwaarden.html.twig', [
'controller_name' => 'BezoekerController',
]);
}
#[Route('bezoeker/contact', name: 'app_contact')]
public function contact(): Response
{
return $this->render('bezoeker/contact.html.twig', [
'controller_name' => 'BezoekerController',
]);
}
}
instractur
<?php
namespace AppController;
use AppEntityRijlessen;
use AppEntityZiekmelding;
use AppFormRijlessenType;
use AppFormZiekmeldingType;
use AppRepositoryMededelingenRepository;
use AppRepositoryRijlessenRepository;
use AppRepositoryZiekmeldingRepository;
use SymfonyComponentHttpFoundationRequest;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAnnotationRoute;
class InstructeurController extends AbstractController
{
#[Route('/instructeur', name: 'app_instructeur')]
public function index(MededelingenRepository $mededelingenRepository): Response
{
$mededelingen = $mededelingenRepository->findAll();
return $this->render('instructeur/index.html.twig', [
'controller_name' => 'InstructeurController',
'mededelingen' => $mededelingen
]);
}
#[Route('instructeur/contact', name: 'app_instructeur_contact')]
public function contact(): Response
{
return $this->render('instructeur/contact.html.twig', [
'controller_name' => 'instructeurController',
]);
}
#[Route('instructeur/rijlessen', name: 'app_rijlessen_index', methods: ['GET'])]
public function rijlessen(RijlessenRepository $rijlessenRepository): Response
{
$rijlessens = $this->getUser()->getInstructeurRijles();
return $this->render('instructeur/rijlessen/index.html.twig', [
'rijlessens' => $rijlessens,
]);
}
#[Route('instructeur/dagrooster', name: 'app_dagrooster', methods: ['GET'])]
public function dagrooster(RijlessenRepository $rijlessenRepository): Response
{
$rijlessens = $this->getUser()->getInstructeurRijles();
return $this->render('instructeur/dagrooster.html.twig', [
'rijlessens' => $rijlessens,
]);
}
#[Route('instructeur/rijlessen/new', name: 'app_rijlessen_new', methods: ['GET', 'POST'])]
public function new(Request $request, RijlessenRepository $rijlessenRepository): Response
{
$rijlessen = new Rijlessen();
$form = $this->createForm(RijlessenType::class, $rijlessen);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$rijlessen->setInstructeur($this->getUser());
$rijlessenRepository->save($rijlessen, true);
return $this->redirectToRoute('app_rijlessen_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('instructeur/rijlessen/new.html.twig', [
'rijlessen' => $rijlessen,
'form' => $form,
]);
}
#[Route('instructeur/rijlessen{id}', name: 'app_rijlessen_show', methods: ['GET'])]
public function show(Rijlessen $rijlessen): Response
{
return $this->render('instructeur/rijlessen/show.html.twig', [
'rijlessen' => $rijlessen,
]);
}
#[Route('instructeur/rijlessen/{id}/edit', name: 'app_rijlessen_edit', methods: ['GET', 'POST'])]
public function edit(Request $request, Rijlessen $rijlessen, RijlessenRepository $rijlessenRepository): Response
{
$form = $this->createForm(RijlessenType::class, $rijlessen);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$rijlessenRepository->save($rijlessen, true);
return $this->redirectToRoute('app_rijlessen_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('instructeur/rijlessen/edit.html.twig', [
'rijlessen' => $rijlessen,
'form' => $form,
]);
}
#[Route('instructeur/rijlessen{id}', name: 'app_rijlessen_delete', methods: ['POST'])]
public function delete(Request $request, Rijlessen $rijlessen, RijlessenRepository $rijlessenRepository): Response
{
if ($this->isCsrfTokenValid('delete'.$rijlessen->getId(), $request->request->get('_token'))) {
$rijlessenRepository->remove($rijlessen, true);
}
return $this->redirectToRoute('app_rijlessen_index', [], Response::HTTP_SEE_OTHER);
}
#[Route('instructeur/ziekmelding/new', name: 'app_ziekmelding_new', methods: ['GET', 'POST'])]
public function newZiekmelding(Request $request, ZiekmeldingRepository $ziekmeldingRepository): Response
{
$ziekmelding = new Ziekmelding();
$form = $this->createForm(ZiekmeldingType::class, $ziekmelding);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$ziekmelding->setInstructeur($this->getUser());
$ziekmeldingRepository->save($ziekmelding, true);
return $this->redirectToRoute('app_instructeur', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('instructeur/newZiekmelding.html.twig', [
'ziekmelding' => $ziekmelding,
'form' => $form,
]);
}
}
member:
<?php
namespace AppController;
use AppEntityUser;
use AppFormUser1Type;
use AppFormUserType;
use AppRepositoryMededelingenRepository;
use AppRepositoryRijlessenRepository;
use AppRepositoryUserRepository;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAnnotationRoute;
class MemberController extends AbstractController
{
#[Route('/member', name: 'app_member')]
public function index(MededelingenRepository $mededelingenRepository): Response
{
$mededelingen = $mededelingenRepository->findAll();
return $this->render('member/index.html.twig', [
'controller_name' => 'MemberController',
'mededelingen' => $mededelingen
]);
}
#[Route('member/contact', name: 'app_member_contact')]
public function contact(): Response
{
return $this->render('member/contact.html.twig', [
'controller_name' => 'MemberController',
]);
}
#[Route('member/rijlessen', name: 'app_rijles_member', methods: ['GET'])]
public function rijlessen(): Response
{
$rijlessen = $this->getUser()->getMemberRijles();
return $this->render('member/memberRijlessen.html.twig', [
'rijlessen' => $rijlessen,
]);
}
#[Route('member/profile{id}', name: 'app_user_index', methods: ['GET'])]
public function profileShow(User $user): Response
{
return $this->render('member/showprofile.html.twig', [
'user' => $user,
]);
}
#[Route('member/profiel/{id}/edit', name: 'app_user_edit', methods: ['GET', 'POST'])]
public function edit(Request $request, User $user, UserRepository $userRepository, UserPasswordHasherInterface $userPasswordHasher): Response
{
$form = $this->createForm(UserType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$user->setPassword(
$userPasswordHasher->hashPassword(
$user,
$form->get('password')->getData()
)
);
$userRepository->save($user, true);
return $this->redirectToRoute('app_member', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('member/edit.html.twig', [
'user' => $user,
'form' => $form,
]);
}
}
regester:
<?php
namespace AppController;
class RegistrationController extends AbstractController
{
#[Route('/register', name: 'app_register')]
public function register(Request $request, UserPasswordHasherInterface $userPasswordHasher, UserAuthenticatorInterface $userAuthenticator, LoginAuthenticator $authenticator, EntityManagerInterface $entityManager): Response
{
$user = new User();
$form = $this->createForm(RegistrationFormType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// encode the plain password
$user->setPassword(
$userPasswordHasher->hashPassword(
$user,
$form->get('plainPassword')->getData()
)
);
$user->setRoles(['ROLE_MEMBER']);
$entityManager->persist($user);
$entityManager->flush();
// do anything else you need here, like send an email
return $userAuthenticator->authenticateUser(
$user,
$authenticator,
$request
);
}
return $this->render('registration/register.html.twig', [
'registrationForm' => $form->createView(),
]);
}
}
**security**
<?php
class SecurityController extends AbstractController
{
#[Route(path: '/login', name: 'app_login')]
public function login(AuthenticationUtils $authenticationUtils): Response
{
// if ($this->getUser()) {
// return $this->redirectToRoute('target_path');
// }
// get the login error if there is one
$error = $authenticationUtils->getLastAuthenticationError();
// last username entered by the user
$lastUsername = $authenticationUtils->getLastUsername();
return $this->render('security/login.html.twig', ['last_username' => $lastUsername, 'error' => $error]);
}
#[Route(path: '/logout', name: 'app_logout')]
public function logout(): void
{
throw new LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
}
}
New contributor
Ali Qaitlbe is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.