<MyRusakov.ru />

Фреймворк Yii 2.0 с нуля. Пример создания сайта

Фреймворк Yii 2.0 с нуля. Пример создания сайта

Видеокурс "Фреймворк Yii 2.0 с нуля. Пример создания сайта" обучит Вас созданию профессиональных сайтов с использованием фреймворка Yii. В курсе есть 2 раздела: теоретический и практический. В теоретическом разделе будут разобраны возможности фреймворка Yii с примерами их использования, а в практической части будет создан сайт Blog.MyRusakov.ru с помощью полученных знаний из теоретического раздела.

Так же почти ко всем урокам идут упражнения для закрепления материала из урока на практике.

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

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Создание движка на MVC. Создаем авторизацию.

Создание движка на MVC. Создаем авторизацию.

Всем привет, и мы продолжаем создавать наш движок на MVC, и сегодня мы создадим авторизацию.

Наши единички вывелись, все хорошо.

Откроем index.php логина в папке view.

<h1>Login</h1>

<form action="login/run" method="post">
  <label>Login</label><input type="text" name="login"><br>
  <label>Password</label><input type="text" name="password"><br>
  <label></label><input type="submit">
</form>

Action задан на метод run. Перейдем в контроллер login.php и добавим его

public function run() {
  $this->model->run();
}

В модели логина уберем вывод единичек. Создадим метод run().

public function run() {
  $sth = $this->db->prepare("SELECT id FROM users WHERE login = :login AND password = MD5(:password)");
  $sth->execute(array(
   ':login' => $_POST['login'],
   ':password' => $_POST['password']
  ));

  $data = $sth->fetchAll();
  $count = $sth = rowCount();
  if($count > 0) {
   Session::init();
   Session::set('loggedIn', true);
   header('Location: ../dashboard');
  } else {
   header('Location: ../login');
  }
}

Здесь мы используем PDO, и я опять же хочу напомнить, кто его не знает, смотрите на сайте статьи по этой теме.

Теперь в нашей базе mvc нам нужно создать таблицу users с 3 полями: id, login, password.

login и password будут типом varchar, login длиной 25, password длиной 32 символа, там будет хэш.

id будет primary key и autoincrement.

Добавим тестового пользователя с логином jesse и паролем - хэшированным логином.

В конструкторе модели логина вызовем родительский конструктор.

public function __construct() {   parent::__construct(); }

Сейчас создадим новый файл dashboard.php в папке controllers, куда скопируем все из контроллера login кроме метода run.

class Dashboard extends Controller {
  // ...
  public function index() {
   $this-view->render('dashboard/index');
  }
}

В папке views создадим папку dashboard, где создадим файл index.php с таким содержанием.

Dashboard... Login in only...

В папке libs создадим файл Session.php

class Session {
  public static function init() {
   @session_start();
  }

  public static function set($key, $value) {
   $_SESSION[$key] = $value;
  }

  public static function get($key) {
   if(isset($_SESSION[$key]))
   return $_SESSION[$key];
  }

  public static function destroy() {
   // unset($_SESSION);
   session_destroy();
  }
}

Добавьте подключение этого файла в index.php после подключения базы данных.

require 'libs/Session.php';

Вызовем в конструкторе класса Dashboard метод init() класса Session.

public function __construct() {
  parent::__construct();
  Session::init();
  $logged = Session::get('loggedIn');
  if($logged == false) {
   Session::destroy();
   header('Location: ../login');
   exit();
  }
}

Также создадим метод logout() в классе dashboard.

public function logout() {
  Session::destroy();
  header('Location: ../login');
  exit();
}

Теперь перейдем в header.php и создадим там ссылку на выход в меню.

<?php if(Session::get('loggedIn') == true):?>
  <a href="<?php echo URL; ?>dashboard/logout">Logout</a>
<?php else: ?>
  <a href="<?php echo URL; ?>login">Login</a>
<?php endif; ?>

Теперь добавим вызов метода init() перед блоком с id=header

<?php Session::init(); ?>

Все что осталось, определить константы в файле database.php.

define('DB_TYPE', 'mysql');
define('DB_HOST', 'localhost');
define('DB_NAME', 'mvc');
define('DB_USER', 'root');
define('DB_PASS', '');

Теперь перейдите в файл Database.php и там измените подключение, подставив вместо значений константы, которые мы только что определили.

Итак, могу вас поздравить, мы только что сделали авторизацию. Спасибо за внимание и удачи!

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (12):

dima9595 dima9595 07.08.2014 23:53:17

Михаил, отредактируйте код пожалуйста, а то в одну строчку всё...

Ответить

php_programmer php_programmer 07.08.2014 23:58:46

Всё исправлено!

Ответить

ScarEngineer ScarEngineer 08.08.2014 17:39:01

Можете написать статью про добавление комментариев на сайт через аякс?

Ответить

php_programmer php_programmer 09.08.2014 00:01:46

А что в этом сложного? Просто отправляйте запросы через JavaScript на сервер, где добавляйте комментарий. Если не понятно, то напишу.

Ответить

php_programmer php_programmer 09.08.2014 23:19:01

Завтра будет

Ответить

Sujimoshi Sujimoshi 12.08.2014 02:49:34

Сложного вроде бы ничего, вопрос только, куда пихать сам JavaScript, насколько я понял то во View (хотя это вроде как работа с сервером, так что это задача модели и контроллера), и подключать в хедер. Может статью не про коментарии, а просто доработать форму входа, сделать проверку логина на аяксе.

Ответить

Sujimoshi Sujimoshi 12.08.2014 16:42:26

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

Ответить

dignity dignity 02.12.2014 09:07:12

"$this-view->render('dashboard/index');" замените на "$this->view->render('dashboard/index');"... Также замените "$count = $sth = rowCount();" на "$count = $sth->rowCount();".

Ответить

vaxa vaxa 05.12.2014 20:16:34

Михаил а как сделать чтобы после авторизации .закрытия и открытия браузера(снова) авторизация пользователя сохранялась если можн ото подробный код .Спасибо

Ответить

kisenko.yura kisenko.yura 01.04.2015 14:11:45

Михаил, подскажите из-за чего данная ошибка вылетает после авторизации: Это главный контроллерЭто вид Fatal error: Call to a member function prepare() on null in C:\OpenServer\domains\mvc\models\login_model.php on line 7 Все делал как Вы описывали!

Ответить

Ljubin Ljubin 06.09.2015 19:26:32

Хотелось бы, чтобы последний абзац выглядел так - ...Теперь перейдите в файл Database.php и там измените подключение к БД в конструкторе, подставив вместо имеющихся значений, константы которые мы только что определили. Вот так - public function __construct() { parent::__construct(DB_TYPE.':host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASS); } Ибо сходу c кавычками и точечками, можна "дупля не отбить".))

Ответить

cheponya cheponya 26.10.2015 14:34:35

Warning: Missing argument 2 for Session::get(), called in H:\home\pdo.learn\www\controllers\dashboard.php on line 9 and defined in H:\home\pdo.learn\www\libs\session.php on line 9 постоянно висит А при logout'е орет что заголовок уже отправлен Warning: Cannot modify header information - headers already sent by (output started at H:\home\pdo.learn\www\libs\session.php:9) in H:\home\pdo.learn\www\controllers\dashboard.php on line 18

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.