Урок 30. Создание PHP фреймворка. Авторизация администратора. Часть 1


Содержание материала:

Панель администрирования

Сейчас мы просто выводим статическую надпись, отражающую факт нахождения в админке. Формы для редактирования страниц и прочие функции администратора мы реализуем позже.

А это вид страницы ошибки 404 (404_view.php):

Контроллер contoller_404.php ничем не отличается от созданных нами ранее.

Контроллер авторизации controller_login.php представлен следующим классом:

function action_index()
<
//$data[«login_status»] = «»;

session_start(); echo $_SESSION[‘admin’];
$_SESSION[‘admin’] = $password;
header(‘Location:http://tinymvc.ru/admin/’);
>
else
<
$data[«login_status»] = «access_denied»;
>
>
else
<
$data[«login_status»] = «»;
>

$this->load->view(‘login_view.php’, ‘template_view.php’, $data);
>
>
?>

Здесь, думаю, все очевидно. Производится вызов вида с отображением формы авторизации. Если данные формы были заполнены, то производится процедура аутентификации. Если данные заполнены не были, в виде выводится соответствующее сообщение.

Опять же напоминаю, что пароль должен храниться в базе данных в виде хэша.

В случае успешной аутентификации, запускается новая сессия и пользователь перенаправляется в админку. В случае неудачи, на странице авторизации (вид login_view.php) пользователю выводится сообщение об этом.

Вид страницы авторизации (login_view.php):

Страница авторизации

Авторизация прошла успешно.

Логин и/или пароль введены неверно.

Собственно, на странице содержится форма ввода логина и пароля

и текстовый абзац для вывода ошибок ввода или аутентификации, если таковые имеются.

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

Дальше можно добавить в админку некоторый функционал. Например, WYSIWYG-редактор для изменения страниц сайта (видов). Но здесь мы этого делать не будем.

В завершении, сверстаем простенький CSS шаблон и интегрируем его в наш сайт, придав ему презентабельный вид. Для этого изменим файл template_view.php добавив в него верстку и подключив CSS и JS файлы.

После проделанных действий, наш сайт будет выглядеть так:

Шаблон MVC используется в качестве архитектурной основы во многих фреймворках и CMS, которые создавались для того, чтобы иметь возможность разрабатывать качественно более сложные решения за более короткий срок. Это стало возможным благодаря повышению уровня абстракции, поскольку есть предел сложности конструкций, которыми может оперировать человеческий мозг.

Получившийся прототип еще далек от того, что называют веб-фреймворком и содержит множество допущений (неправильного кода) — на то он и прототип. Данные статьи же являются отправной точкой в изучении и проектировании CMF. Надеюсь, они вдохновили вас?! Но, прежде чем изобретать очередной велосипед (в виде своей CMS или фреймворка) с «блекджеком и шлюхами», еще раз подумайте, может ваши усилия разумнее направить на развитие и в помощь сообществу уже существующего проекта.

    Редирект на другую страницу средствами PHP

Автоматический редирект (Auto Redirect) на PHP

Сессии. Подробное описание работы и объяснение механизма

Сессии и cookie в PHP (Учебник по PHP 4)

Полное руководство по Yii — хорошо описывает структуру фреймворка и даже если вы не собираетесь использовать Yii, рекомендую полистать

Микрофреймворк Silex (от создателей Symfony2)

Создание Фрэймворка на PHP5 – Часть 1

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

*Заметка: при запуске демо вы должны увидеть “PCA Framework version 0.1 the HTML output”, что продемонстрирует успешную работу нашего приложения на первой стадии его разработки.

Шаг 1: Немного об этой серии уроков

В этой серии уроков мы будем создавать свой собственный фрэймворк на PHP5 с нуля. Он будет включать в себя все основные фишки системы управления контентом. Создавать мы его будем для нужд небольшой организации, ориентирующейся на веб разработку.

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

В течении нескольких недель мы рассмотрим следующие темы:

  • Создание обработчика аутентификации, уровень абстракции базы данных и менеджер шаблонов
  • Объединение трёх объектов перечисленных выше воедино
  • Использование фрэймворка для управления содержимым сайта
  • Создание фантастического дизайна для лицевой и внутренней части сайта
  • Проектирование и реализация процесса входа в систему
  • Возможность расширения сконструированного фрэймворка

Шаг 2: Шаблоны проектирования и их использование в нашем фрэймворке

Когда речь идёт о создании какой-то крупной электронной системы, будь то десктоп программа или веб приложение, то всегда будет вставать ребром вопрос о том, какую архитектуру применить для её имплементации.

Шаблоны проектирования — это как раз то, к чему нужно обратиться при появлении подобной задачи. Для того чтобы подобрать необходимый шаблон для нашего проекта, нужно перебрать целую кучу подобных инструментов функциональной основы. Всё это нужно для того чтобы наша система была флексибильна! Ладно, больше не томлю! В этом уроке мы рассмотрим шаблоны проектирования под названием Singleton и Registry.

Шаг 3: Файлы и папки

Первое, что мы должны сделать, прежде чем приступим к реализации нашего фрэймворка, так это определиться с структурой каталогов, в которых будут храниться наши скрипты и прочие файлы. Мы готовим что-то вроде полигона, на котором будут располагаться наши войска. Большинство разработчиков используют следующие каталоги для подобных целей:

  • Каталог для хранения классов или файлов с функциями
  • Каталог для бизнес логики
  • Каталог для элементов дизайна

Для нас эта инфа — прекрасная отправная точка, потому как файлы, которые относятся к одной из этих 3х категорий, можно объединить в группы. Взгляните на структуру папок, которая приведена ниже. Чуть позже мы всё это детально обсудим.

Учтите, что каталоги .settings .project были созданы IDE, который я использую, и не претендуют на то, чтобы вы их создавали у себя

Базовые функции и объекты, такие как подключение к базе данных, аутентификация, обработчик шаблонов, объекты работающие с электронными сообщениями, объекты, обрабатывающие электронные сообщения, должны располагаться все вместе в каталоге objects, который в свою очередь располагается в папке PCARegistry. Это позволит нам отделить логику, относящуюся к Registry (по которому мы пробежимся вскользь) от самого объекта Registry.

Теперь нам надо определиться, в каком месте мы будем хранить файлы, отвечающие за бизнес-логику нашего фрэймворка. Пожалуй, папка controllers прекрасно подойдёт для этой цели. Каждый метод, являющийся с точки зрения приложения немаловажным (вывод бизнес списков, создание и управление данными, генератор всевозможных галерей и т.д.) будет представлять из себя отдельный контроллер. В этом уроке мы не собираемся ничего такого реализовывать, однако важно, чтобы вы понимали, для чего необходим данный каталог, таким образом, вы с лёгкостью сможете понять, как работает сам фрэймворк.

Элементы дизайна сайта и его шаблоны будут храниться в каталоге skins. Т.к. в перспективе мы хотим использовать несколько дизайнов (например, для того чтобы пользователи сами выбирали, в каком стиле они хотят видеть сайт, или различный дизайн в зависимости от времён года или в честь какого-то праздника), то каждый из этих шаблонов будет храниться в отдельном каталоге.

Шаг 4: Registry

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

Шаблон проектирования Registry использует ссылки на объекты и в своём функционале очень похож на телефонную книгу, которая хранит и извлекает контактные данные. Этот механизм мы будем использовать, для того чтобы иметь доступ к объектам, настройкам системы, а также при необходимости передавать данные и другую информацию в любую часть приложения.

Поскольку мы будем хранить информацию централизованно, то нам понадобится только один единственный объект класса, который будет доступен из любой части приложения. Если не добиться такого эффекта, то это может привести к проблемам потери каких-то данных в самое неподходящее время. Для того чтобы решить эту проблему, наш объект Registry будет так имплементировать шаблон проектирования Singleton, который будет препятствовать появлению более одного объекта.

Ниже, в файле registry.class.php мы побыстренькому пройдёмся по тому, как это всё работает.

Итак, как же работает Registry?

Все объекты хранятся в массиве.

Когда в Registry передаётся новый объект, то автоматически подключается класс, где хранится функциональность данного объекта.

Доступ к данным объектам осуществляется при помощи “ключа” объекта, передаваемого в метод getObject.

Топ-пост этого месяца:  WordPress плагин для лайков

Вы спросите: ну как же происходит предотвращение создания копии объекта Registry?

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

Попытка клонировать объект приведёт к возникновению ошибки.

Если нам необходимо получить доступ к объекту в какой-то другой части нашего фрэймворка, или по какой-либо причине не можем достучаться к нему напрямую, мы можем использовать метод singleton ( PCARegistry::singleton() ) для получения экземпляра Registry.

Шаг 5: index.php

Перед тем как объяснить, каким образом мы будем приписывать функциональность в будущих уроках, давайте взглянем на то, как мы можем достучаться до Registry, и работать с нашим фрэймворком из одной точки – файла index.php.

ЧПУ или другими словами, человеко-понятные урлы можно встретить уже практически в любом веб приложении. Единственный способ реализации такого же эффекта, заключается в том, чтобы все запросы шли через файл index.php. В будущих уроках, мы создадим специальный файл .htaccess, для того чтобы любая часть нашего приложения перенаправляла пользователя на файл index.php.

Ниже вы можете увидеть код файла index.php. Конечно же это не вся его функциональность. Это то, что нужно нам на данный момент.

Итак…что же делает этот файл на данный момент?

  • Вызывает функцию start_session, для того чтобы мы могли получать доступ к необходимым данным из любой части фрэймворка (данную функцию нужно вызывать в самом начале файла)
  • Далее определяем константу, которая будет хранить путь к корневой части нашего фрэймворка, для того чтобы мы могли ссылаться на него из любой части приложения. В добавок создаём ещё одну константу для страховки, чтобы никакие посторонние скрипты не могли обращаться к нашим файлам.
  • Далее реализуем функцию autoload, для того чтобы определить, откуда подкачивать необходимые классы. В нашем случае, это путь к каталогу с контроллерами, поскольку именно там мы храним всю бизнес логику.
  • Потому мы подключаем класс, созданный в начале данного урока
  • В конце мы выводим название нашего фрэймворка, чтобы убедиться, что он находится в рабочем состоянии

На то, как работает объект Registry в нашем фрэймворке, мы создадим dummy класс. Мы можем это продемонстрировать благодаря классу template.class.php, который хранится в каталоге PCARegsitry/objects. Для этого необходимо добавить новый код в файл index.php.

После того, как мы создали $registry, можете вписать следующее:

Если в классе, который мы только что упомянули реализован метод generateOutput, то мы без особых затруднений можем вызывать его в index.php:

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

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.net.tutsplus.com/tutorials/php/creating-a-php5-framework-part-1/
Перевел: Станислав Протасевич
Урок создан: 11 Апреля 2011
Просмотров: 37837
Правила перепечатки

5 последних уроков рубрики «PHP»

Фильтрация данных с помощью zend-filter

Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.

Контекстное экранирование с помощью zend-escaper

Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

Подключение Zend модулей к Expressive

Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

Совет: отправка информации в Google Analytics через API

Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

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

Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

Посоветуйте фреймворк для авторизации

Гуру, дайте совет пожа-а-алуйста!

Есть сайт. Крайне простой. Почти статичная раздача статей (4-5 php файлов по параметру «&article=» собираются в страницу index.php).

Надо добавить полноценную авторизацию. Не переписывая весь сайт, а лишь добавив в нужных местах подключение к фреймворку для авторизации. С уровнями доступа и возможностью вручную указать в статьях гостям-одно, друзьям(вошел под паролем)-другое, админам-третье. Типа if (user_group_ >
Естественно нужна страница (хотя-бы образец, с которого смогу начать разбираться) для ввода пароля, регистрации нового, выхода из регистрации. С мини админкой для управления юзерами. Ну и конечно микро-блоком для проверки регистрации в начале каждой страницы.

С фреймворками НЕ знаком(воообще), все подряд (перебирать фреймворки) изучать и пытаться «приклеить» не хочется. Слышал что вроде все необходимое есть в Yii, но решил (прежде чем начать эксперименты) спросить у Вас!

Еще было бы не плохо поменьше баз и таблиц данных (сервер часто кочует — импорт/экспорт/резервное копирование не должны быть тяжелыми ). И вообще в двух словах опишите на каких базах можно такое построить (кроме MySQL, если возможно)? Особенно пока в режиме отладки было бы не плохо вообще использовать SQLite. И можно будет потом перенести все на другую базу без переписывания ядра?

И еще было бы не плохо, что-бы фрейворк был относительно простой внутри. Хотелось бы позднее его «расширить», добавив одноразовые короткие пароли, ограничив количество неудачных попыток ввести пароль увеличивая интервал до следующей попытки, добавив капчк, привязать отправку пароля на SMS и многое другое. Не сразу, но не хочу потом менять движок авторизации только ради этого.

19.03.2015, 05:46

Посоветуйте фреймворк для букмекерского сайта
Здравствуйте. Подскажите пожалуйста новичку. Требуется движок букмекерской конторы. Денег на.

Посоветуйте фреймворк для создания сервиса бронирования
Здравствуйте. Посоветуйте фреймворк для создания сервиса бронирования авиабилетов. Уровень знаний.

Посоветуйте простой фреймворк
нужен простой и легкий в освоении фреймворк для реализации маленького проекта )

Посоветуйте небольшой, простой фреймворк
Здравствуйте, так как сам я не php программист и в данном вопросе слаб, то посоветуйте несложный.

Фреймворк для начинающих
Здраствуйте. Какой фреймворк посоветуете начинающему php программисту. Навыки php — на уровне.

20.03.2015, 02:30 2 20.03.2015, 15:31 3 20.03.2015, 18:32 4
20.03.2015, 18:32
20.03.2015, 18:44 [ТС] 5

А про Yii слышали? вроде есть куча документаций для авторизации, но меня еще интересует что-бы сайт переписывать целиком под новый фремворк НЕ пришлось. Типа положил РЯДОМ папку с фреймворком, подключил ее к базе и пользуюсь ТОЛЬКО ее авторизацией на своих страницах.

20.03.2015, 18:50 6
20.03.2015, 18:56 7

Эксперементальный код двух летней давности.
http://dcms.su/files/.obmen/DCMS_7.x. der=runame:asc
Ради эксперемента взят kohana и dcms

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

Код как пример можно ипользовать.

20.03.2015, 19:24 8
20.03.2015, 19:52 [ТС] 9

Спасибо! Попробую разобраться.

20.03.2015, 22:55 10

Этот фреймворк умер.
Сейчас актуальны Yii, Laravel, ZF, Symfony.
Есть еще экзотический Phalcon.

21.03.2015, 00:09 [ТС] 11
21.03.2015, 00:31 12
21.03.2015, 10:26 [ТС] 13
21.03.2015, 11:11 14
21.03.2015, 17:05 [ТС] 15

А зачем? Там же нереально много ЛИШНЕГО! У меня куча отчетов с параметрами, таблицами и графиками. Все адаптировано под дизайн разработанный специально под эти отчеты (читать удобно, меню не раздражают, достаточно компактно, ничего лишнего). Все отчеты стандартизированы под этот дизайн. Причем каждый из них автономен и при разработке не использовались глобальные ссылки и классы, а напрямую тянулись утилиты-наборы функций из пхп и картинки фонов и стилей из выделенной для этого папки.
А теперь все это переписывать (сотни часов — на все файлы отчетов и статей) лишь ради ограничения доступа к некоторым статьям и отчетам. Не говоря уж об изучении не нужного мне движка вместо полезного фреймворка. Мне в дальнейшем предстоит сильно перебрать механизм авторизации от стандартного, но проще начинать с чего-то готового. Мне например нужно сделать апи для авторизации с андроид-программы, авторизацию через одноразовые пароли, авторизацию с частичным доступом (под юзером, но только к одному отчету и не больше чем на час для «чужих компьютеров»). Доступ по временному хеш ключу в куках, сессиях или в строке ссылки. А для этого надо очень тонко управлять фреймворком!
К тому-же мой сайт ОЧЕНЬ быстрый за счет статики! Почти не требует памяти (как под базы). Зачем все эти статьи засовывать в базу?

Мне нужна ТОЛЬКО авторизация! Только базы/таблицы под авторизацию. Но нужен реально рабочий пример использования фреймворка с авторизацией. И с хоть примитивной админкой. А не только ссылка на фреймворк с описанием каждой функции. По моим прикидкам можно будет за день-два воткнуть ее в мой сайт, если пойму что нужно вырезать из рабочего сайта под фреймворком. С движка так не «выдрать» — там обычно весь движок насквозь пронизан десятком глобальных перекрестных проверок.

Создание собственного фреймворка. Авторизация. Урок 22

Комментарии

Добрый день, я вот не первое видео обращаю внимание, что вы логику реализовываете в моделях. Конкретно в данном видео прием и обработка POST данных , сравнение значений, хеширование и т.д происходит в модели User. А вопрос собственно в следующем, на сколько это правильно, и не в контроллерах ли вся логика должна быть? Пока , насколько я понял, модели должны работать с БД и возвращать результаты с данными, обработка данных уже в контроллерах. Но! Так как я пока это изучаю, то конечно могу и ошибаться.

Спасибо огромное за уроки! А продолжение будет? И если нет, то нельзя ли хотя бы маленький ролик, в котором опишите какие еще шаги необходимо предпринять для завершения работы. Я думаю, все будут очень благодарны.

Андрей, в одном из прошлых уроков вы рассказывали про Ajax запросы, точнее в 13-м. Подскажите, на сколько это правильно и возможно ли отделить все Ajax запросы в отдельную папку в AjaxController и в нём определять все необходимые методы. Но что бы метод при вызове автоматически определялся по типу запросов (GET || GET). Допустим если нужно получить одинаковый результат обратившись или через POST или GET .

Я так понял, продолжение далее не будет. А все так хорошо начиналось

Спасибо за отличную серию уроков! ждем продолжения банкета)

А продолжение планируется? Если не секрет, все очень круто и понятно.

Как на счет авторизации с помощью cookies?

Андрей, спасибо за уроки. К новому году 23-ий подарок будет? Или вы, как и герой Джима Керри, считаете это число роковым?

Спасибо за уроки! ждем с нетерпением продолжения.

А можно сделать так чтобы fw.loc/index.php открывался как fw.loc/ , т е от дублей избавляться? Если будет возможность скажите пару слов в видео или в комментариях.

Андрей, а продолжение курса ожидается? Очень жду.

И при SQL запросах через PDO туда передаются прямо переменные — разве не будет проблем с защитой? Есть ведь псевдопеременные для передачи в запрос

Андрей спасибо большое за уроки очень понятно и интересно всё. я хотел у вас спросить а у вас будет курс по фреймворку symfony

Будете ли прикручивать сюда Blade / Twig?

Благодаря вашим урокам экономится время, нервы и соответственно деньги. СПАСИБО!

Не работает маршрутизация на хостинге, на локальном сервере все работает. Проект загружал без изменений.

Когда увидел в ролике что вы обратили внимания на мой комментарий аж сам посмеялся)))

Андрей, как реализовать подобное ? Сделать так, что бы пользователи не вошедшие в системы не могли заходить на некоторые контроллеры ?

Создать функцию, проверяющую, авторизован ли пользователь, и вызывать ее в нужных действиях. Пример кода можно посмотреть здесь — webformyself.com/forum/index.php/topic/5930/page__view__findpost__p__47322

Андрей — благодарю Вас за доходчивые пояснения, продолжайте, очень жду.

Ну очень круто и понятно. Спасибо Вам!

Продолжайте пожалуйста! Сверхкруто!

спасибо огромное за уроки, лучше ваших уроков мне на ютубе не попадалось, с интересом слежу за вашими работами

Спасибо за теплые слова!

Спасибо за оценку 😉

Спасибо за урок! Пойду применять уже фреймворк на своем шаблоне) Тема мультиязычности все-таки интересна, но думаю тут у вас гляну уже идею webformyself.com/principy-sozdaniya-multiyazychnyx-sajtov/.

Вывод ошибок лучше на Ajax )

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

Какую программу скачивать? Я вас не понимаю, вы про filezila?

МЕНЯ ИНТЕРЕСУЕТ ВОПРОС? МНЕ ДЕЛАЛИ САЙТ, НО У МЕНЯ ВОЗНИК ТАКОЙ ВОПРОС, ЕСЛИ Я ХОЧУ ЧТО ТО ПА МЕНЯТЬ МНЕ НУЖНА СКАЧИВАТЬ ПРОГРАММУ НА ПК. ЕСЛИ ДА ТО КАК ЗАПОЛНИТЬ ЧТОБЫ ОНА РАБОТАЛА НА МОЁМ САЙТЕ. ПРОГРАММА У МЕНЯ 2.1.0.1

Что простите. Сформулируйте вопрос правильно. Я вас совсем не понял

Ох, вовремя зашел в ютубчик) Спасибо!) Теперь для хардкора осталось какой нибудь VUE или ангуляр подтянуть к проекту)))) это конечно же я не серьёзно) я давненько уже авторизацию сделал для своего проекта через SMS) Какие планы на следующий урок?

Как говорится, на Бога надейся, а сам не плошай)). Наверно не стоит ждать и лучше уже начинать самому разбираться как это реализовать. Я довольно долго работал с MODX Revo, а тут решил сделать один свой личный проект, который на моде делать просто не логично, поэтому решил глянуть данный курс и немного повелосипедить. Тем не менее интересно было бы увидеть продолжение цикла уроков. Уверен, еще можно было бы почерпнуть очень много полезной информации. Кстати, а вы что-то реализовывали на данном фреймворке, как оно в бою?

Я думаю нас Андрей не бросит в беде, и рано или поздно запишет ещё пару уроков :))

Спасибо за ваш курс, очень годный материал, просмотрел от начала до конца. Жаль, что приостановили, так как осталась не реализованной такая мастхэвная штука как системные события или посредники(middleware в Laravel). Без них наверно никак по другому и не вклиниться в работу каких-то скриптов.

Андрей, здравствуйте!) У меня вопросик появился, вчера вечером сидел думал насчет https, как осуществить с такой конфигурацией? 2 файла htaccess. Не черта не получается 🙂

А вот это зря. Интерес есть, да и еще ой ей какой. Жду с нетерпением продолжения серии. Никогда не встречался с таким подробным и детальным объяснением всех аспектов.

Панель администрирования

Сейчас мы просто выводим статическую надпись, отражающую факт нахождения в админке. Формы для редактирования страниц и прочие функции администратора мы реализуем позже.

А это вид страницы ошибки 404 (404_view.php):

Контроллер contoller_404.php ничем не отличается от созданных нами ранее.

Контроллер авторизации controller_login.php представлен следующим классом:

function action_index()
<
//$data[«login_status»] = «»;

session_start(); echo $_SESSION[‘admin’];
$_SESSION[‘admin’] = $password;
header(‘Location:http://tinymvc.ru/admin/’);
>
else
<
$data[«login_status»] = «access_denied»;
>
>
else
<
$data[«login_status»] = «»;
>

$this->load->view(‘login_view.php’, ‘template_view.php’, $data);
>
>
?>

Здесь, думаю, все очевидно. Производится вызов вида с отображением формы авторизации. Если данные формы были заполнены, то производится процедура аутентификации. Если данные заполнены не были, в виде выводится соответствующее сообщение.

Опять же напоминаю, что пароль должен храниться в базе данных в виде хэша.

В случае успешной аутентификации, запускается новая сессия и пользователь перенаправляется в админку. В случае неудачи, на странице авторизации (вид login_view.php) пользователю выводится сообщение об этом.

Вид страницы авторизации (login_view.php):

Страница авторизации

Авторизация прошла успешно.

Логин и/или пароль введены неверно.

Собственно, на странице содержится форма ввода логина и пароля

и текстовый абзац для вывода ошибок ввода или аутентификации, если таковые имеются.

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

Дальше можно добавить в админку некоторый функционал. Например, WYSIWYG-редактор для изменения страниц сайта (видов). Но здесь мы этого делать не будем.

В завершении, сверстаем простенький CSS шаблон и интегрируем его в наш сайт, придав ему презентабельный вид. Для этого изменим файл template_view.php добавив в него верстку и подключив CSS и JS файлы.

После проделанных действий, наш сайт будет выглядеть так:

Шаблон MVC используется в качестве архитектурной основы во многих фреймворках и CMS, которые создавались для того, чтобы иметь возможность разрабатывать качественно более сложные решения за более короткий срок. Это стало возможным благодаря повышению уровня абстракции, поскольку есть предел сложности конструкций, которыми может оперировать человеческий мозг.

Получившийся прототип еще далек от того, что называют веб-фреймворком и содержит множество допущений (неправильного кода) — на то он и прототип. Данные статьи же являются отправной точкой в изучении и проектировании CMF. Надеюсь, они вдохновили вас?! Но, прежде чем изобретать очередной велосипед (в виде своей CMS или фреймворка) с «блекджеком и шлюхами», еще раз подумайте, может ваши усилия разумнее направить на развитие и в помощь сообществу уже существующего проекта.

    Редирект на другую страницу средствами PHP

Автоматический редирект (Auto Redirect) на PHP

Сессии. Подробное описание работы и объяснение механизма

Сессии и cookie в PHP (Учебник по PHP 4)

Полное руководство по Yii — хорошо описывает структуру фреймворка и даже если вы не собираетесь использовать Yii, рекомендую полистать

Микрофреймворк Silex (от создателей Symfony2)

Урок 30. Создание собственного фреймворка. Авторизация администратора. Часть 1

Смотреть видео Урок 30. Создание собственного фреймворка. Авторизация администратора. Часть 1 онлайн, скачать на мобильный.

100 | 2
WebForMySelf | 7 мес. назад

Разработка веб-приложения на PHP. Посмотрите уроки: https://webformyself.com/minikurs/php/free.html

В этом уроке будет продолжена тема создания собственного PHP фреймворка и CMS на базе этого фреймворка. Реализация пользовательской части CMS была показана в предыдущих уроках. Начиная с данного урока будет показана реализация администраторской части. Из этого урока вы узнаете, как интегрировать шаблон AdminLTE в качестве шаблона для админки.

Урок 30. Создание PHP фреймворка. Авторизация администратора. Часть 1

100 Понравилось 2 Не понравилось

Разработка веб-приложения на PHP. Посмотрите уроки: webformyself/minikurs/php/free.html

В этом уроке будет продолжена тема создания собственного PHP фреймворка и CMS на базе этого фреймворка. Реализация пользовательской части CMS была показана в предыдущих уроках. Начиная с данного урока будет показана реализация администраторской части. Из этого урока вы узнаете, как интегрировать шаблон AdminLTE в качестве шаблона для админки.

Raznoevideo.ru

Создать аккаунт

Register with your social account

Урок 31. Создание собственного фреймворка. Авторизация администратора. Часть 2

Спасибо! Поделитесь с друзьями!

Вам не понравилось видео. Спасибо за то что поделились своим мнением!

Описание

Разработка веб-приложения на PHP. Посмотрите уроки: https://webformyself.com/minikurs/php/free.html

В этом уроке будет продолжена тема создания собственного PHP-фреймворка и CMS на базе этого фреймворка. Из данного урока вы узнаете, как можно ограничить доступ к админской части сайта и реализовать авторизацию администратора.

Посоветуйте фреймворк для авторизации

Гуру, дайте совет пожа-а-алуйста!

Есть сайт. Крайне простой. Почти статичная раздача статей (4-5 php файлов по параметру «&article=» собираются в страницу index.php).

Надо добавить полноценную авторизацию. Не переписывая весь сайт, а лишь добавив в нужных местах подключение к фреймворку для авторизации. С уровнями доступа и возможностью вручную указать в статьях гостям-одно, друзьям(вошел под паролем)-другое, админам-третье. Типа if (user_group_ >
Естественно нужна страница (хотя-бы образец, с которого смогу начать разбираться) для ввода пароля, регистрации нового, выхода из регистрации. С мини админкой для управления юзерами. Ну и конечно микро-блоком для проверки регистрации в начале каждой страницы.

С фреймворками НЕ знаком(воообще), все подряд (перебирать фреймворки) изучать и пытаться «приклеить» не хочется. Слышал что вроде все необходимое есть в Yii, но решил (прежде чем начать эксперименты) спросить у Вас!

Еще было бы не плохо поменьше баз и таблиц данных (сервер часто кочует — импорт/экспорт/резервное копирование не должны быть тяжелыми ). И вообще в двух словах опишите на каких базах можно такое построить (кроме MySQL, если возможно)? Особенно пока в режиме отладки было бы не плохо вообще использовать SQLite. И можно будет потом перенести все на другую базу без переписывания ядра?

И еще было бы не плохо, что-бы фрейворк был относительно простой внутри. Хотелось бы позднее его «расширить», добавив одноразовые короткие пароли, ограничив количество неудачных попыток ввести пароль увеличивая интервал до следующей попытки, добавив капчк, привязать отправку пароля на SMS и многое другое. Не сразу, но не хочу потом менять движок авторизации только ради этого.

19.03.2015, 05:46

Посоветуйте фреймворк для букмекерского сайта
Здравствуйте. Подскажите пожалуйста новичку. Требуется движок букмекерской конторы. Денег на.

Посоветуйте фреймворк для создания сервиса бронирования
Здравствуйте. Посоветуйте фреймворк для создания сервиса бронирования авиабилетов. Уровень знаний.

Посоветуйте простой фреймворк
нужен простой и легкий в освоении фреймворк для реализации маленького проекта )

Посоветуйте небольшой, простой фреймворк
Здравствуйте, так как сам я не php программист и в данном вопросе слаб, то посоветуйте несложный.

Фреймворк для начинающих
Здраствуйте. Какой фреймворк посоветуете начинающему php программисту. Навыки php — на уровне.

20.03.2015, 02:30 2
20.03.2015, 15:31 3
20.03.2015, 18:32 4
20.03.2015, 18:32
20.03.2015, 18:44 [ТС] 5

А про Yii слышали? вроде есть куча документаций для авторизации, но меня еще интересует что-бы сайт переписывать целиком под новый фремворк НЕ пришлось. Типа положил РЯДОМ папку с фреймворком, подключил ее к базе и пользуюсь ТОЛЬКО ее авторизацией на своих страницах.

20.03.2015, 18:50 6
20.03.2015, 18:56 7

Эксперементальный код двух летней давности.
http://dcms.su/files/.obmen/DCMS_7.x. der=runame:asc
Ради эксперемента взят kohana и dcms

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

Код как пример можно ипользовать.

20.03.2015, 19:24 8
20.03.2015, 19:52 [ТС] 9

Спасибо! Попробую разобраться.

20.03.2015, 22:55 10

Этот фреймворк умер.
Сейчас актуальны Yii, Laravel, ZF, Symfony.
Есть еще экзотический Phalcon.

21.03.2015, 00:09 [ТС] 11
21.03.2015, 00:31 12
21.03.2015, 10:26 [ТС] 13
21.03.2015, 11:11 14
21.03.2015, 17:05 [ТС] 15

А зачем? Там же нереально много ЛИШНЕГО! У меня куча отчетов с параметрами, таблицами и графиками. Все адаптировано под дизайн разработанный специально под эти отчеты (читать удобно, меню не раздражают, достаточно компактно, ничего лишнего). Все отчеты стандартизированы под этот дизайн. Причем каждый из них автономен и при разработке не использовались глобальные ссылки и классы, а напрямую тянулись утилиты-наборы функций из пхп и картинки фонов и стилей из выделенной для этого папки.
А теперь все это переписывать (сотни часов — на все файлы отчетов и статей) лишь ради ограничения доступа к некоторым статьям и отчетам. Не говоря уж об изучении не нужного мне движка вместо полезного фреймворка. Мне в дальнейшем предстоит сильно перебрать механизм авторизации от стандартного, но проще начинать с чего-то готового. Мне например нужно сделать апи для авторизации с андроид-программы, авторизацию через одноразовые пароли, авторизацию с частичным доступом (под юзером, но только к одному отчету и не больше чем на час для «чужих компьютеров»). Доступ по временному хеш ключу в куках, сессиях или в строке ссылки. А для этого надо очень тонко управлять фреймворком!
К тому-же мой сайт ОЧЕНЬ быстрый за счет статики! Почти не требует памяти (как под базы). Зачем все эти статьи засовывать в базу?

Мне нужна ТОЛЬКО авторизация! Только базы/таблицы под авторизацию. Но нужен реально рабочий пример использования фреймворка с авторизацией. И с хоть примитивной админкой. А не только ссылка на фреймворк с описанием каждой функции. По моим прикидкам можно будет за день-два воткнуть ее в мой сайт, если пойму что нужно вырезать из рабочего сайта под фреймворком. С движка так не «выдрать» — там обычно весь движок насквозь пронизан десятком глобальных перекрестных проверок.

Урок 30. Создание PHP фреймворка. Авторизация администратора. Часть 1

Создание профиля или личного кабинета пользователя на MVC, PHP и SQL

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

Сначала нужно модернизировать нашу таблицу с пользователями до такого вида:

Добавились два новых поля – ava и role. Поле ava будет хранить название загруженной аватарки пользователя с расширением. Поле role будет содержать статус пользователя: 0 – пользователь, 1 – администратор, 2 – младший модератор, 3 – старший модератор. Если пользователь не авторизирован, то он имеет статус гость.

Добавим маршруты в файл routes.php, он находится в папке config:

Теперь создадим обработчик для страницы профиля, создавать его нужно в файле UserController.php, он находится в папке controllers. Сначала с помощью функции checkAdminId проверяем, авторизирован ли пользователь, если да, то в переменную id_user вернется его id. Далее с помощью функции getUserById, по id записанному в переменной id_user, получаем данные пользователя из таблицы БД и записываем их в п переменную user. Эти данные будут отображаться в полях формы.

Если на странице с формой нажали кнопку «Изменить», то методом POST получаем значение заполненных полей и проверяем, корректно ли введен логин пользователя и не занят ли он. Если да, то проверяем, выбрал ли пользователь аватар, если нет, то ему будет выставлен аватар по умолчанию. Затем будет выполнена функция editUserProfile, она изменит данные в таблице базы данных.

Если же аватар выбран в форме, то мы используем функцию editUserProfileImg. Функция выполнит загрузку нового аватара на сервер и изменит данные в таблице базы данных.

Теперь опишем используемые функции, они будут находиться в папке models в файле News.php:

Функция editUserProfile. Она соединяется с базой данных и производит обновление поля с логином пользователя.

Функция editUserProfileImg. С помощью функции downloadAvatar загружает картинку на сервер и получает в переменную ava_url имя с расширением. Далее выполняет SQL запрос, который обновляет поле с аватаркой и логином пользователя:

Функция downloadAvatar. Эта функция полностью идентична функции загрузки изображений на сервер, разница лишь в пути сохранения изображения:

Функция checkAdminId проверяет, авторизирован ли пользователь, путем проверки существования переменной сессии user. Если переменная существует, то возвращаем значение этой переменной, иначе делаем редирект на страницу авторизации:

Функция getIserById получает данные пользователя из базы данных, по полученному id:

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

Полям e-mail и статус отключаем редактирование, они содержат информационный характер. После нажатия кнопки изменить, страница будет перезагружена и если данные успешно отредактированы, то показываем пользователю сообщение об этом.

В браузере эта форма будет выглядеть следующим образом:

Так как наши пароли зашифрованы, да и просто для удобства, создаем форму смены пароля. Создаем ее обработчик в NewsController.php:

В обработчике мы получили введенные в форму пароли, сравнили, равны ли введенные пароли и проверили, чтобы пароль был не короче шести символов. Далее если ошибок нет, то мы используем функцию generateHash, которая шифрует пароль (эта функция была разобрана в статье по созданию регистрации). Затем с помощью функции editPassword (была рассмотрена в этой статье ) меняем пароль в таблице базы данных на новый. Форма страницы редактирования пароля будет реализована так:

В браузере она будет отображаться следующим образом:

В итоге мы получаем профиль пользователя с возможностью смены логина и аватара. Чтобы не создавать функцию downloadAvatar, можно хранить аватарки вместе с загруженными картинками, а это не очень удобно. Лучше сделать проверку какого-то параметра в функции downloadImg и относительно него выбирать путь, по которому будем сохранять аватарку.

Смотрите также дополнительные статьи про MVC

Топ-пост этого месяца:  Скрываем контент от гостей.
Добавить комментарий