Неправильно работать с Symfony 4.
Использование напрямую $_POST
, $_SERVER
и т. Д. Не рекомендуется.
Вот как должна быть ваша функция newcalendar
:
public function newcalendar(Request $request, JobRepository $jobRepository, ClasseRepository $classeRepository) {
$user=$this->getUser();
if($user) {
$currentStep=$user->getStep();
// Custom query result could be optimised
$jobId=$this->getJobId($user->getId())[0]['job_id'];
// Use Job repository instead
// $repo = $this->getDoctrine()->getRepository(Job::class);
$job=$jobRepository->find($jobId);
//Do not override your object, create a new varaible instead, or use getter directly
// $job=$job->getName();
if($currentStep < 10) {
return $this->redirectToRoute("registration$currentStep");
}
if($job->getName() == 1 || $job->getName() == 'admin' || $job->getName() == "responsable de formation" || $job->getName() == "consseiller") {
// Do not use $_SERVER directly, may cause issues with fragments
// if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if($request->isMethod('POST')) {
// Same reason as $_SERVER
$calendar=new Calendar();
// $calendar->setStartDate($_POST['start']);
$calendar->setStartDate($request->request->get('start'));
// $calendar->setEndDate($_POST['end']);
$calendar->setEndDate($request->request->get('end'));
// $calendar->setEvent($_POST['event']);
$calendar->setEvent($request->request->get('event'));
// $classeId=$_POST['classeid'];
$classeId=$request->request->get('classeid'); // Not used
// Uncomment to check this value
// dump($request->request->get('classeid'));
// exit();
// Use Classe repository instead
// $repo=$this->getDoctrine()->getRepository(Classe::class);
// $classe=$repo->find($request->request->get('classeid'));
$classe=$classeRepository->find($request->request->get('classeid'));
//check if not null
if($classe) {
$calendar->setClasse($classe);
$em=$this->getDoctrine()->getManager();
$em->persist($calendar);
$em->flush();
}
return $this->redirectToRoute('calendar');
}
return $this->render("formation/newcalendar.html.twig");
} else {
return $this->render("dashboard/index.html.twig", array(
'controller_name'=>'DashboardController',
));
}
}
// Could be handled by firewall
return $this->redirectToRoute('security_login');
}
Я оставил несколько комментариев в коде.
Что касается последней строки этой функции, принудительный вход в систему может обрабатываться брандмауэром Symfony в config/packages/security.yaml
Symfony Security
Контроль доступа Symfony
Сначала исправьте свой код. Вы заметите, что я оставил дамп в вашем коде, раскомментировал его и проверил, что classeid
является допустимым значением.
Глядя на журнал исключений, это, скорее всего, причина вашей ошибки
[EDIT] Просто, чтобы убедиться, пожалуйста, выполните следующие команды:
php bin/console make:migration
php bin/console doctrine:migrations:migrate