Symfony Framework Регистрация пользователей Создание ролей пользователей tutorial 7

returnt

01.02.2015

startSymfony

Прежде всего наверное стоит начать с html вёрстки формы входа. Что бы долго не ходить вокруг я приведу пример простой формы на html с небольшим количеством полей ввода логина пароля и почтового адреса.

  1. <? foreach ($error as $value) {?>
  2. <a style=»color: lime;»><?php echo $value ?></a>
  3. <? } ?>
  4. <form action=»» method=»POST»>
  5. <label>Имя пользователя</label>
  6. <input type=»text» name=»username»><br>
  7. <label>Пароль</label>
  8. <input type=»text» name=»password»><br>
  9. <label>E-mail</label>
  10. <input type=»email» name=»email»><br>
  11. <input type=»submit» name=»submit_reg»>
  12. </form>

Как мы можем видеть, форма достаточно просто состоит она помимо полей ввода ещё и с цикла отработки вывода ошибок валидационных правил.  Метод отправки используем POST.

С сегодняшнего урока я буду приводить пример пространства имён файлов подключаемых в проекте. Вот некоторые из них, которые мы будем использовать в нашем примере.

  1. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  2. use Symfony\Component\HttpFoundation\Request;
  3. use Gda\GdaBundle\Entity\User;

Первая строка отвечает за возможность наследования нашего созданного контроллера от FrameworkBundle Controller. Вторая строка даст нам возможность работать с HttpFoundation. Другими словами мы сможем получить с вида в контроллер информацию, что ввёл пользователь, для этого подключим Request. Далее третей строкой не забываем про нашу модель данных, Entity менеджер будет нам в помощь. Думаю, в ней всё ясно для чего и где находится данный файл, подробно далее.

Ну и наконец, долгожданный regAction:

  1. public function regAction() {
  2. $session = $this->getRequest()->getSession();
  3. $data = array();
  4. $data[‘error’] = array();
  5. if(!$session->has(‘login_gda_CMS’)){
  6. if(isset($_POST[‘submit_reg’])){
  7. $username = $_POST[‘username’];
  8. $password = $_POST[‘password’];
  9. $email = $_POST[’email’];
  10. $salt = md5(date(«d.m.y||h:i»));
  11. if(preg_match(«#^[aA-zZ0-9\-_]+$#»,$username) && preg_match(«#^[aA-zZ0-9\-_]+$#»,$password)){
  12. if(strlen(trim($username))<=10 && strlen(trim($username))>=3){
  13. if(strlen(trim($password))<=10 && strlen(trim($password))>=3){
  14. $user = new User();
  15. $user->setUsername($username);
  16. $user->setEmail($email);
  17. $user->setSalt($salt);
  18. $user->setPassword(md5($salt . $password));
  19. $em = $this->get(‘doctrine’)->getManager();
  20. $em->persist($user);
  21. $em->flush();
  22. $sql = ‘SELECT MAX(id) FROM user’;
  23. $query = $em->getConnection()->query($sql)->fetchAll();
  24. $sql = ‘INSERT INTO user_role VALUES (‘.(int)$query[0][‘MAX(id)’].’,1)’;
  25. $em->getConnection()->query($sql);
  26. } else {
  27. $data[‘error’] = array(‘Не коректныые данные в пароле!’);
  28. }
  29. } else {
  30. $data[‘error’] = array(‘Не коректныые данные в имени пользователя!’);
  31. }
  32. } else {
  33. $data[‘error’] = array(‘Логин или пароль имею не допустимые символы!’);
  34. }
  35. }
  36. return $this->render(‘GdaGdaBundle:AuthView:Reg.html.php’, $data);
  37. } else {
  38. return $this->redirect(‘/home’);
  39. }
  40. }

Что же давайте так же попробуем разобрать его построчно.

Строка 1: видим функцию, которая и является нашим загружаемым екшеном

Строка 2: Функция, благодаря которой мы можем получить данные сессии, то есть инициализируем объект сессии.

Строка 3: Пустой массив array.

Строка 4: Пустой массив с ошибками.

Строка 5: Функция которая проверяет создан ли объект сессии с указанным хешом то есть именем сессии.

Строка 7,8,9: Отлавливание введённых пользователем данных в виде.

Строка 10: Переменная, которая генерирует соль для хеширования пароля.

Строка 11: Функция проверки данных на корректность и допустимость символов проверяем имя пользователя и пароль в одном условии через логическое И.

Строка 12,13: Функция, которая пропускает пробелы и возвращает количество символов в строке, таким образом, проверяем строку на допустимое количество символов, своего рода вариационные правила.

Строка 14: Инициализируем объект класса User.

Строка 15: Вызываем функцию setUsername  класса  User для записи имени пользователя в базу данных через интерфейс класса User.

Строка 16-18: Те же действия записи в БД почтового адреса, соли пароля, хешированного пароля.

Строка 19: Подымаем ‘doctrine’ и вызываем Ентити менеджер.

Строка 20: Передаем объекту ‘doctrine’ класс

Строка 21: отправляем на обработку проведённые действия в результате чего пользователь новый будет создан и записан в базу.

Строка 22: SQL Запрос на получение максимального значения id с таблицы user, в нашем случае это будет последний зарегистрированный пользователь, это нужно для создания роли пользователя.

Строка 23: Непосредственно выполняем наш заранее подготовленный запрос

Строка 24: Вносим новую запись в БД с указание роли пользователя с только что полученным идентификатором.

Строка 25: Выполняем запрос типа ‘INSERT

Далее до конца мы видим блоки, если в которых описаны простейшие конструкции передачи ошибок пользователю.

Строка 38: Перенаправит нас на домашнюю страницу сайта.

Более подробно можно просмотреть в обзоре ниже.


  • Иван

    Спасибо большое за уроки! Догадываюсь какой это труд. Порой комментарии в коде лень оставлять, а тут на видео снимать весь процесс.
    С нетерпением жду продолжения.
    Возможно, так как изучение Симфони рассчитано на людей уже знакомых с php, то будет более конструктивно меньше уделять внимание простым записям на php. И больше говорить о взаимодействиях в самом фреймворке. Хотя общее описание двумя словами похоже все же нужно.
    Еще раз, спасибо.

    С ув. Иван.

    • returnt

      Благодарю за понимание!