Создание Доски объявлений с использованием фреймворка YII2.
Автор: Жданов В.В.
Данный курс - практикум по созданию сайта с использованием фреймворка YII2.
Цель: создание небольшого сайта с нуля до "коробочного" варианта, готового к размещению на хостинге.
Теории здесь не много, больше практической работы по принципу: "произвел действие - получил результат".
Также по максимуму используем функционал фреймворка YII2.
Программируем - и кайфуем!
# | Название видеоурока | Видео / Тесты | Решило | Рейтинг | Доступ |
---|---|---|---|---|---|
1 |
![]() |
|
|||
На этом уроке мы рассмотрим тематику разработки и настроим инструменты Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 4 час. 26 мин. [Показать отчёт] Научился: среду поставил без особых затруднений, поругался на безопасность, но это было преодолено без труда Среда на сегодня скачивается эта: Product Version: Apache NetBeans IDE 11.2 Updates: Updates available Java: 12.0.2; Java HotSpot(TM) 64-Bit Server VM 12.0.2+10 Runtime: Java(TM) SE Runtime Environment 12.0.2+10 System: Mac OS X version 10.13.6 running on x86_64; UTF-8; ru_RU (nb) User directory: /Users/dmitrysinitsin/Library/Application Support/NetBeans/11.2 Cache directory: /Users/dmitrysinitsin/Library/Caches/NetBeans/11.2 А вот с опенсервером не подружимся на маке, как я понял, он заточен лишь на винду Надо что-то будет придумывать. Не занимался этим на макОси, но орешек знаний твёрд и всё же мы не привыкли отступать ) Советы по локальному серверу на макОси приветствуются! |
|||||
2 |
![]() |
1 тест |
|||
На этом уроке мы создадим проект нового сайта, установим YII2 и запустим новый сайт на нашем локальном домене Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 5 час. 50 мин. [Показать отчёт] Научился: Apache NetBeans IDE 11.2 подключил к YII, не с первой попытки, но всё же Ключ cookieValidationKey внёс внутри апострофов, сохранил Осталось решить вопрос с локальным сервером Нашел статьи на хабре и не только - это будет не ОпенСервер, но суть локального сервера будет |
|||||
3 |
![]() |
2 теста |
|||
На этом уроке мы настроим удобные для человека ссылки и поменяем название сайта при помощи настроек config/web.php Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 28 мин. [Показать отчёт] Научился: локальный сервер поднял с помощью МАМР, преттиЮРЛ и заголовок "Доска объявлений" кириллицей установил .htaccess отвечает за базовые настройки сервера RewriteRule . index.php [L] обрезает index.php в адресной строке RewriteCond %{REQUEST_FILENAME} !-d урезает путь до директории RewriteCond %{REQUEST_FILENAME} !-f урезает путь до файла Сложности: Мак сдался и запустил локальный сервер на МАМР - тот же пиашпиМайАдмин посмотрел, там доступен Буду пилить сайт дальше! |
|||||
4 |
![]() |
|
|||
На этом уроке мы создадим схему базы данных для нашего проекта
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 2 час. 45 мин. [Показать отчёт] Научился: собрали план битвы для создания запросов SQL по первичному сооружению БД Приятно, когда получается! Тут песен просили - добавил в отчет ) Сложности: Понять, что локальный сервер запустить на макОси не так уж и сложно при нынешней легкости доступа к информации Видеообзор: QqHIw7mw1qE |
|||||
5 |
![]() |
1 тест |
|||
На этом уроке мы создадим базу данных, подключим ее к нашему проекту и создадим таблицу пользователей при помощи механизма миграций Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 2 час. 31 мин. [Показать отчёт] Научился: таблица user с пятью полями в базе данных bulletinsdb создана успешно, но лишь в самом PHPMyAdmin Консоль с миграцией дружить не захотела, по ходу пьесы буду разбираться с этим вопросом Либо консоль не ту запускал, либо в другом каталоге орудовал, хотя переключение в каталог bulletinsdb в строке консоли отражалось, что вселяло надежду на успех Однако, финальная цель была достигнута, пусть и другим путем |
|||||
6 |
![]() |
1 тест |
|||
На этом уроке мы подкорректируем модель User и реализуем аутентификацию на сайте через базу данных
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 3 час. 36 мин. [Показать отчёт] Научился: генератор ActiveRecord не пускал ругаясь на наличие пароля у пользователя root - первый заслон Это преодолел, поменяв пароль этого пользователя в phpMyAdmin на отсутствующий, и о чудо, в генератор http://localhost:8888/gii/model зайти и создать новую модель удалось Но после этого phpMyAdmin остался недоволен моими правками пароля пользователя root и ждет решения. в config.inc.php замена $cfg['Servers'][$i]['password'] = 'root'; на $cfg['Servers'][$i]['password'] = ''; войти в админку phpMyAdmin не помогла, пишет в ответ MySQL said:Documentation Cannot connect: invalid settings. Но вход в phpMyAdmin - проблема частная, не думаю, что не удастся забороть ) |
|||||
7 |
![]() |
|
|||
На этом уроке создадим таблицу и модель Информация о пользователе
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 56 мин. [Показать отчёт] Научился: миграции работают - но тут много чести нет, просто поднял всё на окнах UserRecord создал, связь с UserinfoRecord тоже добавил |
|||||
8 |
![]() |
1 тест |
|||
На этом уроке мы рассмотрим теоретические основы работы MVC и создадим новый контроллер в нашем проекте
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 26 мин. [Показать отчёт] Научился: представления - это странички сайта, которые вызываются из модели контроллером |
|||||
9 | MVC - информация о пользователе |
|
|||
На этом уроке мы получим данные о пользователе из базы в представление
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 48 мин. [Показать отчёт] Научился: $currUser - в коде РНР не забывай, что переменные (имена) указываются начиная с символа доллара Видишь символ доллара в начале имени в РНР - это переменная Краткая форма вкрапления РНР кода в HTML разметку отделяется по краям так <? ?> Переменную $currUser получили из модели UserController методом find по номеру идентификатора 2, взяли одну запись Сложности: Спасибо подсказкам - наз на хэз поменял ))) |
|||||
10 | Пользователь - кто зарегистрирован сейчас? |
1 тест |
|||
На этом уроке мы получим информацию о текущем зарегистрированном пользователе, а также сделаем рефакторинг кода Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 47 мин. [Показать отчёт] Научился: кнопка "Статистика и отчеты" к уроку - Ваш кладезь мудрости впередиидущих курсантов Столкнулся с проблемой вызова нестатического метода, возникла ошибка(иллюстрация номер ноль) Просмотрел, перенабрал - не помогло. Почитал комментарии с иллюстрации с ошибкой - причины в силу малоопытности не понял Стал смотреть отчеты впередиидущих - и о чудо, Степан уже в это упирался и даже при его заявленной неопытности в заморских языках, он нашел что метод(здесь они функциями называются) не имеет экземпляра и его просто можно в сигнатуре указать статическим и всё взлетит Так и сделал(следующая иллюстрация) - и всё взлетело. Остались два вопроса: - как Степан при том, что пишет в языках не силён, нашел ответ про сделать метод статиком - как у Валерия без статика всё сработало. Загадок две, ответа пока не нашел. |
|||||
11 | Новый пользователь - заготовка и меню |
|
|||
На этом уроке мы создадим действие и представление для добавления пользователя, а также добавим пункт меню "Регистрация" Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 32 мин. [Показать отчёт] Научился: информация по пользователю выводится на основании номера идентификатора, взятого из текущей сессии Двойное двоеточие :: это оператор разрешения области видимости ("Paamayim Nekudotayim"). Эта лексема, разрешает обращаться к статическим свойствам, константам, переопределенным свойствам, методам класса. views - layouts - main - это хидер(навбар) и футер, то что не меняется вслед за изменением контента страницы в центре |
|||||
12 | Новый пользователь - модель для формы |
1 тест |
|||
На этом уроке мы создадим модель параметров формы добавления пользователя
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 31 мин. [Показать отчёт] Научился: alt+shift+F - форматирование кода в нетбинс по правилам(хоткИ или "горячая клавиша" для причёсывания того, что наваял Начали создавать форму для заведения нового пользователя(форма регистрации) Поля сделали обязательными для заполнения, при обратном будет выведено сообщение |
|||||
13 | Новый пользователь - дизайн формы начало |
|
|||
На этом уроке мы зададим поля формы добавления пользователя
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 53 мин. [Показать отчёт] Научился: ошибка в одной букве - и всё, нет отображения твоих изменений Хлебные крошки в коде написал как бредкрамПс вместо бреадкрамБс - искал, чего это у меня нет менюшек Будь внимателен, пиашпишник ) Наличие одного лишь пробела между стартом строки <? и знаком равно приводит к неинтерпретируемому коду РНР - нулевая иллюстрация(неверный код с пробелом) и первая(годный код и пробел удален) |
|||||
14 | Новый пользователь - дизайн формы: поля и колонки |
1 тест |
|||
На этом уроке мы добавим все поля формы, кнопку сохранения, а также разместим поля в две колонки Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 24 мин. [Показать отчёт] Научился: как хорошо, когда ты уже проходил уроки Валерия по бутстрапу! Хотя бы тут нет вопросов ) Только написал вышеприведенную строку и давай пробовать как там бутстрап отработал - не отработал смотрю, нет двух колонок (нулевая иллюстрация) Ы-ы-ы, думаю, делил шкуру непойманного, только похвалился и вот те на - облом ) Потом вспомнил, что смотрел не на полный экран, а ведь бутстрап, он же про резиновую вёрстку, дай посмотрю на полный экран - вуаля! (первая иллюстрация - всё прекрасно делится на два поля |
|||||
15 | Новый пользователь - сохранение нового пользователя |
1 тест |
|||
На этом уроке мы напишем алгоритм сохранения записи о пользователе и информации о нем
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 3 час. 33 мин. [Показать отчёт] Научился: путь к экземпляру \app\models\ можно прописать в юзингах сверху, тогда указание на этот экземпляр доступно в краткой форме Too few arguments to function app\models\UserRecord::createUser() == Слишком мало аргументов для функции app \ models \ UserRecord :: createUser () Маловато предоставили - вот и ругается Сложности: Добавление после передачи аргумента в createUser($newUser); упёрлось в ошибку Искал причину и не находил. Отправил отчет с ошибкой и помощь пришла. Была вероятность, что отчет будет сминусован с невменяемыми и безответными комментариями и отправка его окажется мартышкиным трудом. Но, к счастью, отчет попался на глаза коллегам, которые увидели мою оплошность и указали мне на неё. Вот здесь я и снова прочувствовал пользу от прохождения курса коллективно - ошибка оказалась в написании имени переменной с ошибкой, а я видимо замыленным глазом смотрел и не видел, ведь пересматривал же я этот участок кода и бесполезно. Поправил регистр одной лишь буквы и всё сработало! Спасибо, это было поучительно! |
|||||
16 | Красивая аутентификация на сайте |
|
|||
На этом уроке мы поменяем дизайн формы входа на сайт
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 8 мин. [Показать отчёт] Научился: русифицировали страницу входа на сайт с помощью функции attributeLabels() взяв часть полей по образцу юзерФорм Часть настроек была выполнена в файле D:\OSPanel\domains\bulletin\views\site\login.php |
|||||
17 | Что доступно Юпитеру? |
1 тест |
|||
На этом занятии мы научимся управлять доступом к пунктам главного меню
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 45 мин. [Показать отчёт] Научился: начали использовать созданную прежде авторизацию на сайте - разграничили области видимости базового представления (менюшки Контакты) Расположение для редактирования - D:\OSPanel\domains\bulletin\views\layouts\main.php Восклицательный знак перед оператором привычно означает логическое отрицание |
|||||
18 | Объявления - создание базы и модели |
1 тест |
|||
На этом уроке мы создадим таблицу bulletins при помощи миграций и сгенерируем для данной таблицы класс ActiveRecord
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 21 мин. [Показать отчёт] Научился: миграции отработали, в генераторе модели создали новую модель, проверили её наличие в нетбинс Миграция создает пхп файл в нетбинсе, его правим как надо и после запуска результат виден в БД через phpMyAdmin |
|||||
19 | Объявления - контроллер, представление и много записей |
1 тест |
|||
На этом уроке мы создадим контроллер и представление для работы с объявлениями, а также сделаем связь записей о пользователях и объявлениях типа "один-ко-многим" Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 36 мин. [Показать отчёт] Научился: один пользователь может создать много объявлений, но одно объявление может создать лишь один пользователь, не двое и не трое Один ко многим делается в D:\OSPanel\domains\bulletin\models\UserRecord.php методом хэзМэни Снова запнулся за регистры при наименовании методов - public function actionIndex() - не так регистры при том же имени и вуаля - пейдж нот фаунд к Вашим услугам! |
|||||
20 | Объявление - функциональный дизайн страницы |
|
|||
На этом уроке мы сделаем дизайн страницы наших объявлений, который поможет нам работать с объявлениями в дальнейшем
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 32 мин. [Показать отчёт] Научился: статусы объявлений предусмотрены в трех видах - черновик, опубликованное и удаленное Оператор hover позволяет применять к объекту вебдизайна свойство(какое привяжешь) которое активируется при наведении на него указателя мыши (ховеркрафт - по великобритански это вертолёт, как бы мышь пролетает над тем объектом и отрабатывает действие, которое ты привязал к этому событию ховера) |
|||||
21 | Объявление - ограничение доступа |
|
|||
На этом уроке мы ограничим доступ неавторизированного пользователя к странице управления объявлениями, а также решим некоторые технические вопросы
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 27 мин. [Показать отчёт] Научился: чтобы неавторизованный пользователь не создавал объявлений сделали в контроллере оператор редиректа на страницу авторизации для юзеров которые isGuest tr == table row строка таблицы td == table data данные таблицы |
|||||
22 | Объявление - поля для пользовательских форм |
|
|||
На этом уроке мы создадим класс BulletinsForm и определим, какие поля будут использоваться при создании объявления Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 24 мин. [Показать отчёт] Научился: массивами задали новые поля в форме создания объявления Сложности: главное - не запутаться в квадратных скобках и открывая их, не забывать закрывать |
|||||
23 | Объявление - форма добавления объявлений |
1 тест |
|||
На этом уроке мы создадим представление для добавления объявлений и действие контроллера, запускающего это представление Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 42 мин. [Показать отчёт] Научился: Format в контекстном меню выравнивает весь открытый файл по правилам форматирования разметки для удобства чтения В контейнеры див передаётся переменная форм как поле с атрибутами модели и её поля с выводом в текстовое окно ввода |
|||||
24 | Объявление - сохранение в черновик |
|
|||
На этом уроке мы реализуем механизм сохранения нового объявления в черновик
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 24 мин. [Показать отчёт] Научился: в контроллере объявлений добавили проверку на метод отправки нового объявления post Запись в БД про дом Гусляра добавилась - счастье в сердце почувствовал )) |
|||||
25 | Объявление - список |
|
|||
На этом уроке мы реализуем вывод сохраненных в базе объявлений в список
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 57 мин. [Показать отчёт] Научился: сохранение в БД != наличию записи на сайте, об этом надо позаботиться отдельно Гостю не дозволено будет добавлять объявления, в этом случае перенаправляем его на страницу авторизации <?php { ?> затем может быть куча строк с html-разметкой а затем где-то ниже будет так <? } ?> С непривычки дико выглядит и сначала сбивает с толку |
|||||
26 | Объявление - всё на публику |
1 тест |
|||
На этом уроке мы сделаем наши объявления опубликованными
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 25 мин. [Показать отчёт] Научился: для публикации находится одна запись по id, выполняются функции setPublic(); и save(); а затем перекидывает на /bulletins/index |
|||||
27 | Объявление - публикация на главной странице |
1 тест |
|||
На этом уроке мы разместим наши опубликованные объявления на главной странице сайта
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 41 мин. [Показать отчёт] Научился: D:\OSPanel\domains\bulletin\views\site\index.php - это представление стартовой страницы col-sm-6 это колСмолл6(база равна двенадцати, значит если стоит такой класс для смолл устройства(планшетики), то колонок будет у них две) col-md-4 - при базе 12 будет три колонки для средних устройств типа небольших мониторов col-lg-3 - для лардж скринов (самые большие мониторы) 12\3=4колонки Всё вышеописанное про колэсэм, эмдэ, и элгэ - это про Бутстрап для резиновости страниц <p>Информация</p> - пэ это параграф https://placeholder.com/ - сервис предоставляющий готовые заглушки изображений на сайт |
|||||
28 | Объявление - скрыть нельзя удалить |
|
|||
На этом уроке мы реализуем возможность помещать объявления в группу удаленных, восстанавливать их оттуда, а также отключать их просмотр Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 25 мин. [Показать отчёт] Научился: D:\OSPanel\domains\bulletin\views\bulletins\index.php - представление со списком объявлений для публикации, редактирования и удаления Добавили функционал удаления и восстановления объявлений |
|||||
29 | Объявление - статусный рефакторинг |
1 тест |
|||
НА этом уроке мы сделаем рефакторинг методов работы со статусом объявлений
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 21 мин. [Показать отчёт] Научился: рефакторинг актуален и в РНР Выбор варианта выполнили ветвлением ифами-элзами с передачей ключевого аргумента в метод(указали его вторым аргументом в сигнатуре) Теперь вместо повторяющегося кода в функциях экшенов всего лишь меняли статус выбирая объект по идентификатору и применяя ему значение в одинарных апострофах setStatus($id, 'public'); - вызываемому методу передаются здесь два аргумента в скобках, а именно переменная(в РНР они пишутся со знака доллара обязательно) и значение(значения указываются в одинарных кавычках или апострофах) |
|||||
30 | Объявление - рефакторинг редактирования |
|
|||
На этом уроке мы реализуем редактирование путем небольшого видоизменения функции добавления записи
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 35 мин. [Показать отчёт] Научился: способ отключения функции по умолчанию - присвоить переменной отрицательное значение(из разряда невозможных в нормальной работе кода)- вариант -1 равнозначен отключению по умолчанию при этом значении работы функции до присвоения ей принудительно действительно актуального значения идентификатора Добавили ветвление в функцию actionAddbulletin - в зависимости от статуса и идентификатора выполняются разные действия над выбранным объявлением |
|||||
31 | Объявление: запрос - в функцию & кнопка для изображений |
|
|||
На этом уроке мы сделаем рефакторинг метода index и добавим кнопки для перехода в режим работы с изображениями
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 40 мин. [Показать отчёт] Научился: если в сигнатуре функции аргумент уже указан со значением по умолчанию, то при вызове этой функции для случая значения по умолчанию, аргумент в круглые скобки не пиши - излишне Выполняя действия над данными в функции, не забывай присваивать результат обработки какой-либо переменной и в конце возвращай её из функции, иначе результат обработки повиснет в воздухе Можно и сразу возвращать ритёрном, без переменной, если не ошибаюсь, по аналогии с Джавой |
|||||
32 | Изображения - микс из миграций |
|
|||
На этом уроке мы через механизм миграций создадим таблицу photo и добавим поле для аватары в таблицу bulletins
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 31 мин. [Показать отчёт] Научился: миграцией создали новую таблицу --fields=avatar:integer в качестве параметра консоли для команды миграции создает заготовку добавления поля в имеющейся таблице yii migrate без дополнительных параметров стартует ранее подготовленные миграции в работу |
|||||
33 | Изображения - снова MVC |
|
|||
На этом уроке мы создадим модель, контролер и представление для работы с фото
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 26 мин. [Показать отчёт] Научился: модель создаем с помощью браузерного мастера новых моделей /gii/model В результате его работы создается файл models\PhotoRecord.php Важно: один-ко-многим == одно объявление может включать много фото Но, одно фото не может принадлежать многим объявлениям! Реализация в коде выглядит так: $this->hasMany(PhotoRecord::classname, ['bull_id','id']); Для перехода по ссылке в проекте должен быть в наличии соответствующий контроллер $this->render('index'); А представление(вьюшка) уже займется выведением всего вышесозданного в браузер |
|||||
34 | Изображения - работа с моделью |
|
|||
На этом уроке мы передадим модель нашего объявления в представление
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 46 мин. [Показать отчёт] Научился: ['bull_id'=>'id'] эта запись значит, что ассоциированный ключ 'bull_id' принимает значение => этого аргумента 'id' |
|||||
35 | Работаем над ошибками - YII2 в помощь |
|
|||
На этом уроке мы разберемся, как работать над ошибками и читать сигналы дебаггера YII2
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 36 мин. [Показать отчёт] Научился: отладчик ошибок включается здесь D:\OSPanel\domains\bulletin\web\index.php А) syntax error, unexpected '->' (T_OBJECT_OPERATOR) такое сообщение с указанием на имя файла возвращается когда перед this забудешь поставить знак $ Перед переменной $this не пропустишь знак начала имени переменной, в РНР это знак доллара и ошибка устранена (нулевая иллюстрация - эта ошибка и возврат фреймворка о ней Б) В следующей иллюстрации мы видим ошибку закравшегося пробела в строке 13 <? php - если между знаком вопроса и тремя литерами php окажется пробел - код не парсится и возвращается ошибка Решение - не допускать пробел при открытии блока РНР, вот так правильно - <?php скриншот одной из ошибок и ее анализ (что за ошибка, в какой строке видна, из-за чего она, как исправили) |
|||||
36 | Изображения - где живут картинки |
1 тест |
|||
На этом уроке мы создадим папку для изображений, разместим там изображение по умолчанию, а также создадим универсальные параметры пути и изображения по умолчанию
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 35 мин. [Показать отчёт] Научился: определили папку для фотоиллюстраций к объявлениям D:\OSPanel\domains\bulletin\web\images Место для хранения глобальных параметров здесь: D:\OSPanel\domains\bulletin\config\params.php В контроллере создали переменные, принимающие данные о пути и имени картинки из параметров и передали их модели через рендер В индексе после этого в блоке РНР путь стал таким - '<?=$path.$no_photo?>' Коротко и удобно |
|||||
37 | Изображения - модель формы |
|
|||
На этом уроке мы создадим модель PhotoForm для работы с изображениями Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 43 мин. [Показать отчёт] Научился: юзинги указываются после неймспейса(пространства имен) Если при создании РНР-файла в контексте выбирать не просто файл РНР, а РНР-класс, в заготовке сразу появляется шапка из пространства имен и шаблон класса Для картинок будут использоваться три поля - имя $file, путь $link и пояснение $info |
|||||
38 | Изображение - загрузочное представление |
|
|||
На этом занятии мы создадим форму представления, через которое будет загружаться изображение Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 36 мин. [Показать отчёт] Научился: чтобы контроллер мог оперировать моделью фотоФорм и фотоРекорд - пишем юзинги про них в контроллере Выбор картинки реализовали блоком РНР fileInput() - определяет файл с изображением textarea() - создает текстовое поле для комментария к изображению submitButton() с аргументами рисует кнопку подтверждения добавляемой картинки |
|||||
39 | Изображение - загрузка файла на сайт |
1 тест |
|||
На этом уроке мы реализуем алгоритм загрузки изображений на сайт
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 11 мин. [Показать отчёт] Научился: научили класс PhotoForm загружать в проект картинку time() возвращает текущее количество миллисекунд от создания ОС Юникс Ошибка добавления фото на 10-ой минуте добивается до победы в 16:24, помимо подсказки Степана, она тоже помогла и обнадежила, последней гранатой в окоп врага, простите, ошибки кода, было удаление слеша перед images/ в переменной 'imagePath' в файле конфига D:\OSPanel\domains\bulletin\config\params.php |
|||||
40 | ПРОМЕЖУТОЧНЫЙ ВИДЕО ОБЗОР |
без видео |
|||
Мы уже многое сделали на нашем видеокурсе, и автору очень важно узнать Ваше мнение о данном курсе и получить обратную связь в форме видео-презентации и ответов на вопросы. Сделай видео-презентацию своего сайта. Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 13 мин. [Показать отчёт] Научился: работа на разных компах приводит к неожиданным результатам Чему научился за отчётный период имею доложить следующее: Код РНР встраивается в документ HTML и наоборот. О границах: начало кода РНР можно распознать по слитному сочетанию пяти знаков <?php то есть меньше, знак вопроса и три малые литеры php Окончание кода РНР может отсутствовать, но если начинается блок HTML-разметки, то обязательно встретится слитное (без пробелов) сочетание двух знаков "вопроса" и "больше" вот так: ?> YII(yes it is) использует концепцию MVC Модель рулит правилами View - видит пользователь в браузере Контроллер передает правила от Модели к Представлению Работа крайне аккуратно должна выполняться - один лишний пробел или незакрытая скобка, не тот регистр в имени переменной или класса и всё - код нерабочий, страница не отображается Но есть плюшка - встроенный дебаггер, подсказывающий в каком файле искать и на какую строку обратить внимание, выводимый вместо сбойной страницы после обновления Нравится краткость видеоуроков, при их продолжительности удобнее подбирать время для занятий Сейчас выходные, но они не вечны и скоро краткость Валерия будет на вес золота с приходом будней, когда звонит звонок и надо всё бросить и лететь куда скажут ) В проект хочу добавить хостинг и покупку домена, в прошлом году такое делал, надо повторить и поиграть с боевым сайтом, составить конкуренцию Авито ))) Догнать и перегнать, как учила нас партия))) Продолжение такого яркого курса конечно же нужно, интересно посмотреть на реализацию способностей коллег Всем удачи и сбычи мечт в области интеллектуального роста! Сложности: Звук пришлось накладывать в ютубе - ноут, что делает сейчас работы по курсу с виндой 32 бита, микрофон в системе отсутствует, записал на нём видеоряд, аудио наложил в редакторе ютуба Мак, где со звуком всё в порядке, пока не заборол миграции, оттого видео не с него Видеообзор: nHk0n-ysDWI |
|||||
41 | Изображение - сохранение пути в базу |
|
|||
На этом уроке мы реализуем сохранение пути к файлу изображений в базу данных
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 51 мин. [Показать отчёт] Научился: грохнули добавленные на позапрошлом уроке фото из проекта здесь D:\OSPanel\domains\bulletin\web\images\DSC06577_1578419736.jpg и т.д Для отображения аватара добавленной картинки требуется лидирующий слеш в указании источника картинки <img src="/<?=$photo_->link?>" alt="no_photo" > Помимо добавления фото на сайте и в проекте, записи о добавленных фото заносятся в БД bulletins |
|||||
42 | Изображение - управление картинками |
|
|||
На этом уроке мы займемся дизайном - создадим выпадающее меню управления изображением
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 29 мин. [Показать отчёт] Научился: отбутстрапили форму добавления фото (я всё прилично выражаюсь))) <div> - контейнер для размещения объектов на странице поблочно data-toggle - атрибут переключающий данные, к примеру выпадающее меню получится, если присвоить ему значение дропдаун <span> очень похож на элемент <div>, но <div> является блочным элементом, в то время как <span> является строчным <ul> - маркированный список, у которого каждый элемент должен начинаться с тега <li>. Если к тегу <ul> применяется таблица стилей, то элементы <li> наследуют эти свойства <li> - отдельный элемент списка <a> - предназначен для создания ссылок |
|||||
43 | Изображение - JS - немного теории и пижонства |
1 тест |
|||
На этом уроке мы рассмотрим работу JS на yii2
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 39 мин. [Показать отчёт] Научился: изначально javaScript писался для браузера NetScape Сервис -> Параметры -> Редактор -> "Автозавершение кода" и "Подсказки" - место для посмотреть, если достали нетбинсовские подсказки вечно всплывающие и накидывающие не то что надо Блок джаваскрипта внутрь блока РНР вставляем через такое обозначение: $script = <<< JS ... JS; При указании обращения к объекту по идентификатору не забывай перед именем указать диез # |
|||||
44 | Изображение - JS - глобализация |
|
|||
На этом уроке мы перенесем все скрипты JS в отдельный файл, а также реализуем открытие и скрытие элементов ввода информации Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 10 мин. [Показать отчёт] Научился: писал-писал весь урок комментарии, нажал эф5 и всё коту под хвост по уроку всё прошло успешно |
|||||
45 | Изображение - JS - сохранение информации в базу |
1 тест |
|||
На этом уроке мы научим нашу систему сохранять информацию об изображениях в базу с использованием технологии ajax Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 51 мин. [Показать отчёт] Научился: ctrl+F5 - обновление страницы с подчисткой кэша Значения переменных в массивах указываются через двоеточие Видишь двоеточие в массиве - после него значение той переменной, имя которой указано до двоеточия В сотый раз себе напишу - перед именами переменных РНР не забывай доллары вписывать, а то переменные работать без долларов отказываются |
|||||
46 | Изображение - JS - извлечение методом ajax |
|
|||
На этом уроке мы научим ajax получать информацию об изображениях из базы
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 23 мин. [Показать отчёт] Научился: перезагрузка страницы оператором $('body').load('/photo/index') приводит к отключению функционала кнопки записи комментария в базу замена его на оператор location.reload(); приводит к автоматическому обновлению страницы |
|||||
47 | Изображение - аватарка - вывод на главной странице |
|
|||
На этом уроке мы реализуем вывод главных изображений каждого объявления (далее - аватарки) на главной странице Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 34 мин. [Показать отчёт] Научился: чтобы отобразить аватар объявления на главной странице - поставили тестом тройку идентификатор фото в поле аватар таблицы объявлений в строке о продаже авто - добавили в модели объявлений в метод рулз поле аватар - в лейблы также добавили отсутсвующий аватар Вызов метода(функции) отличается от вызова поля наличием круглых скобок после имени метода(функции) |
|||||
48 | Изображение - аватарка - работа над ошибками связей |
|
|||
На данном уроке мы исправим ошибки вывода фотографий, очистим базу и заново загрузим в нашу базу фотографии в одно из объявлений Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 26 мин. [Показать отчёт] Научился: в ФотоКонтроллер добавили проверку на авторизацию пользователя и если не регистрировался - изволь, заполняй формуляр) |
|||||
49 | Изображение - аватарка - как стать главной |
|
|||
На этом уроке мы создадим код, делающий любое фото главным
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 45 мин. [Показать отчёт] Научился: удалили из проекта повторяющиеся фото - искать проще по добавленному времени создания в миллисекундах которое - выбираем из одинаковых начинающихся названий фото то, у которого время миллисекунд меньше - фото было добавлено раньше и грохаем его Кнопке "Сделать главной" добавили в свойства класс, идентификатор фото и идентификатор текущего объявления Вызов функции в джаваскрипте выполняем по классу - имя класса указываем с лидирующей точкой |
|||||
50 | Изображение - удаление - ни шагу без подтверждения! |
|
|||
На этом уроке мы реализуем всплывающее окно подтверждения действия и протестируем результаты выбора различных вариантов Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 24 мин. [Показать отчёт] Научился: реализовали проверку удаления с алертами сообщающими о выборе |
|||||
51 | Изображение - удаление - удаление файла и записи |
|
|||
На этом уроке мы реализуем удаление файлов изображений и записей о них из базы данных
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 13 мин. [Показать отчёт] Научился: создав в аяксе url:"setdelete", не забывай в фотоконтроллере сделать функцию экшнСетделет В который раз пишу для себя - следи за именами классов и переменных, не забывай давать доллары долларовладельцам, а переменным в РНР - значки доллара! Иначе ничего у тебя, дружище, работать просто не будет! Проверено электроникой ) Многострочный комментарий в нетбинсе начинай с /* и заканчивай так */ Следующая забава, возможно подстерегающая не только меня, заключается в моменте видеоурока 9 минута 35 секунд - когда мы алертом получаем путь до переменной возвращая $photoRec->link; В браузере Мозилла Файрфокс возвращается ошибка, а в ГуглХроме - прекрасно возвращается путь, как у Валерия! (иллюстрация к уроку номер 0) Если кликнуть по трилистнику в браузере внизу справа, то открывается окно дебага http://bull.local/debug/default/index Тут вся подноготная -читай да анализируй на славу |
|||||
52 | Главная страница - подробности - ссылки и заготовка представлени |
|
|||
На этом уроке мы создадим ссылки для объявлений на главной странице и заготовку представления для подробного вывода информации объявления Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 27 мин. [Показать отчёт] Научился: из представления D:\OSPanel\domains\bulletin\views\site\index.php сделали ссылку на контроллер для оживления нашего ховера "Подробнее" Применяй в гиперссылке на индексе дефис между словами, которые в Контроллере у тебя с большой буквы в названии вызываемой функции |
|||||
53 | Главная страница - подробности - больше подробностей |
|
|||
На этом уроке мы выведем максимум информации на страницу подробностей объявления
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 44 мин. [Показать отчёт] Научился: тег источника картинки не требует обязательного закрытия, судя по финалу видео <img src= у Валерия в конце видео без закрывающего > отрабатывает на ура У себя закрыл этот тег, на скриншотах видно, и тоже отрабатывает без вопросов Видимо не всякий тег требует непременного закрывающего > |
|||||
54 | Главная страница - подробности - расширяя информацию |
1 тест |
|||
На этом уроке мы внесем в наш код изменения, которые позволят сохранять объявления с большим количеством информации Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 5 мин. [Показать отчёт] Научился: функция safeDown() в теле миграции нужня для отката неудачного изменения обратно либо просто информирования об ошибке Второй фильтр на длину пояснения к объявлению стоял здесь D:\OSPanel\domains\bulletin\models\BulletinsRecord.php В методе рулез грохнули этот оператор , 'max' => 255 ибо он ограничивал длину текста даже для ЛОНГТЕКСТА не более 255 символов $this->info= nl2br($bull->info); исправляет форматирование абзаца текста |
|||||
55 | Главная страница - оформление - дизайн объявления |
|
|||
На этом уроке мы зададим стиль дизайна объявления
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 32 мин. [Показать отчёт] Научился: после перенесения блока информации <?=$bulletin->info?> в отдельный див убрали у него блок параграфа за ненадобностью <span class="badge"> дает на странице прекрасный овал фоном В таблице обязаны быть <tr> - тейблроуы) То есть строки и тейблдаты - <td> в которые уже и помещаем информацию таблицы |
|||||
56 | Главная страница - оформление - дизайн элементов базовой страницы |
1 тест |
|||
На этом уроке мы выведем информацию о себе в элементе footer и сделаем главное меню стильным и красивым
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 13 мин. [Показать отчёт] Научился: D:\OSPanel\domains\bulletin\views\layouts\main.php - основная вьюха, отвечающая за хидер и футер NavBar::begin - хелпер, создающий строку в меню navbar-inverse дает черный фон с белым текстом D:\OSPanel\domains\bulletin\assets\AppAsset.php - базовые параметры, откуда грузится проект, где подтягиваются стили и где лежит джаваскрипт Каскадные таблицы стилей требуют, чтобы стиль по идентификатору начинался с диеза #bulltopmenu Стили по классам начинаем с точки |
|||||
57 | Главная страница - оформление - ловим цвет пикселя |
|
|||
На этом уроке мы рассмотрим использование инструментов определения цвета пикселя (Пипетка) Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 15 мин. [Показать отчёт] Научился: цвета по палитре #FFF - черный #000 - белый пипетка онлайн гуглится Если не годится встроенная в Мозиллу пипетка, можно воспользоваться онлайн анализаторами цвета, тоже прекрасно работают Сложности: Понять, зачем в разделе "Самостоятельная работа" пункты 3. 4. 5. ведь они пустые! |
|||||
58 | Главная страница - оформление - смотрим все изображения |
|
|||
На этом уроке мы реализуем просмотр всех изображений объявления "не хуже, чем на Avito"
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 34 мин. [Показать отчёт] Научился: ночами лучше работается - урок записан Валерием в половину третьего ночи 9 октября! Вот кто рано встаёт... РНР код разрывается, если внутри нужна HTML-разметка так <?php........здесь код пиашпи {?> тут разметка страницы <? }?> - так закрыли блок Ховер прекрасен - обновляется картинка даже если окно неактивно (лежит под другим как на иллюстрации за номером 1) |
|||||
59 | Главная страница - оформление - стильный логотип |
|
|||
На этом уроке мы реализуем вывод логотипа в иконку проекта и в пункт меню перехода на главную страницу
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 43 мин. [Показать отчёт] Научился: http://v1.iconsearch.ru/ - масса готовых пиктограмм (иконок) D:\OSPanel\domains\bulletin\web\favicon.ico - источник пиктограммы в закладке браузера D:\OSPanel\domains\bulletin\views\layouts\main.php - путь к пиктограмме уже в окне браузера, не в закладке 7:10 видео - "...и у нас куда-то делось название" (Я вместо ctrl+F5 сделал обновление страницы просто через F5 и увидел иную картину (скриншот номер ноль) - видимо название у Валерия тоже съехало вниз из-за добавления пиктограммы) Пишу это ещё не досмотрев видео до конца, интрига сериала продолжается... Логотип также как у Степана отражается лишь на главной, на внутренних страничках вместо доски также слово home Может вопрос во времени обновления всего сайта, комп тормозит, бывает не с первого обновления вижу изменения Посмотрю, как дальше будет вести себя эта иконка. Вкладка "Статистика и отчеты" помогает хорошо - видишь кто с чем сталкивался. |
|||||
60 | Главная страница - оформление - оповещения через баннер |
|
|||
На этом уроке мы создадим баннер для оповещений, новостей
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 39 мин. [Показать отчёт] Научился: банеры нужны для принудительного предоставления информации пользователям Та информация, которой они интересуются находится ими методом серфинга по сайту, а вот то, чего они знать не могли, но мы хотим им донести - вот для этого и будет нужен банер. Это как банеры вдоль дороги - мы едем себе по своим делам, нам Толи и Васи с их днями рождения и свадьбами неинтересны, но мы про эти события узнаем из банеров. Не злоупотребляйте банерами, коллеги! Не становитесь спамерами ))) А вот банер, который сообщает о ремонтных работах на проезжей части лучше не игнорировать - это вопрос Вашей же безопасности. ...\views\layouts\main.php - орудуй здесь, если хочешь, чтобы виджет был виден на всех страницах сайта. |
|||||
61 | Разделы (темы) - немного теории |
|
|||
На этом уроке мы рассмотрим вопрос тематик объявлений на нашем сайте, а также составим план (структуру) таблицы тем Themes и связующей таблицы ThemesBulletins
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 27 мин. [Показать отчёт] Научился: организуя связи между таблицами выделяют главную или родительскую таблицу (primary key table / master table) и зависимую, дочернюю таблицу Дочерняя таблица зависит от родительской Внешний ключ - это один или несколько столбцов из одной таблицы, являющийся ключом из другой таблицы Поле themes-id таблицы Themesbulletins будет ключеваться с полем id таблицы Themes А поле bulletins-id таблицы Themesbulletins будет связано с полем id таблицы Bulletins |
|||||
62 | Разделы (темы) - миграции с внешними ключами |
|
|||
На этом уроке мы создадим миграции таблиц themes и themesbulletins, сами эти таблицы и их модели ActiveRecord с внешними связями
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 47 мин. [Показать отчёт] Научился: http://bull.local/gii/model - автогенератор моделей Результат можно проверить в нетбинсе или иной IDE Аналогично, ни в какую не хотела проявляться в дереве нетбинса ThemesRecord.php Менюшек для рефреша не нашел, так же перезапустил нетбинс - после этого модель подхватилась |
|||||
63 | Обратная связь - мозговой штурм - внештатные ситуации |
|
|||
В данном уроке попрошу Вас выполнить небольшую самостоятельную работу и дать обратную связь. Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 2 мин. [Показать отчёт] Научился: создав архив папки D:\OSPanel\domains\bulletin\ ты не сохранишь тем самым БД - она хранится не там d:/ospanel/userdata/php_upload/ - место по умолчанию куда упадет дамп БД, но лишь после принудительного экспорта, ИЛИ куда укажешь в диалоге сохранения (результат у нас получился под именем bulletinsdb.sql ) SQLSTATE[HY000] [1049] Unknown database 'bulletinsdb' - такое увидишь, если полетела БД Для восстановления БД создай пустую базу под тем же именем и импортируй в неё таблицы из предварительно сохраненного дампа 1) ...проблемы при просмотре главной страницы и объявлений Аватар не сохраняет пропорции высоты к ширине, причем, те, что взяты из интернета ведут себя по разному - кошак обрезан, но не исказился, а девушка с коляской сжата по горизонтали, фото моего авто взятое с экшн-камеры также сжато по горизонтали. Причины пока не нашел (иллюстрация номер ноль) Когда делал скриншот, увеличил масштаб до 125% - коляска исправилась в пропорциях, а фото автомобиля нет 2) ...проблемы при добавлении объявлений? ...корректно ли... объявление, если ... будет HTML-код или JS скрипт? а если в тексте объявления будет php-код? Объявления добавил три штуки с внесением между привет и медвед кода HTML, JS, PHP. Добавление и публикация без проблем, вкрапления джаваскрипт и HTML попали в текст объявления, РНР код вообще никак не повлиял на текст объявления, но делая скриншот уменьшил масштаб - объявления идут неровно, есть пустые участки страницы между ними - выглядит неаппетитно (иллюстрация номер ноль) 3) ... о загрузке файлов изображений - сбоев не возникло 4) ...SQL-инъекции - экранирования слешей мы не делали, следовательно защиты у нас пока нет 5) ...еще ошибки - в детализации объявления (иллюстрация номер один) фото накладывается на таблицу с описанием товара к примеру здесь http://bull.local/site/view-bulletin?id=3 |
|||||
64 | Разделы (темы) - вывод тем в объявлении |
|
|||
На этом уроке мы реализуем вывод тем на странице объявления
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 8 мин. [Показать отчёт] Научился: <h2>Темы</h2> задает средний заголовок с текстом Темы В админке не надо второй раз кликать вперед )) Иначе запись добавляется дважды и кнопок с темой становится по количеству кликов - можно хоть весь экран кнопками замостить. Не сразу понял, отчего сначала кнопка с темой не появлялась, причина была в том, что старому объявлению делал связь, не тому на которое смотрел, а затем найдя нужное кликал по два раза - смотрю - кнопок с темой две. Решение - просто удалить повторную запись в админке |
|||||
65 | Разделы (темы) - меню тематик |
|
|||
На этом уроке мы реализуем вывод ссылок на темы на главной странице и подсчет объявлений в каждой теме
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 27 мин. [Показать отчёт] Научился: в роли коровы для темы Детям у меня оказался кошак - он ближе по сущности к животным Функция getThemesBullCount() из модели вызывается успешно и счетчик при добавлении связей в таблицу themesbulletins успешно инкрементируется |
|||||
66 | Разделы (темы) - тематические выборки |
|
|||
На этом уроке мы реализуем выбор объявлений по темам и вывод их на основную страницу
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 6 час. 38 мин. [Показать отчёт] Научился: гиперссылка представления должна обращаться к контроллеру в URL после знака вопроса указываются параметры Присвоение = один знак равно Эквивалентность == два знака равно array_push() - функция добавления элемента массива Лидирующий слеш обязан быть в составном URL |
|||||
67 | Разделы (темы) - полезные переходы |
|
|||
На этом уроке мы реализуем возвращение со страницы объявлений на предыдущую страницу, а также переходы по темам объявления по типу хештегов
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 23 мин. [Показать отчёт] Научился: в гиперссылку кнопки передается переменная $prev_url Переменная создается в контроллере базовыми функциями Yii::$app->request->referrer; Кнопки тем переделали из кнопок баттон в блок а с добавлением гиперссылки на адрес /site/index?id=<?=$thb->themes->id?> |
|||||
68 | Разделы (темы) - администрирование - теория и заготовки |
|
|||
На этом уроке мы создадим контроллер для администрирования разделов (тем) и представление index
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 17 мин. [Показать отчёт] Научился: администрирование сайта предоставляется пользователям по ролям, простой зарегистрированный пользователь не должен иметь доступа ко всему функционалу на сайте Создав во вьюшке новую кнопку не забудь создать для нее свой Контроллер Ошибка Class 'app\controllers\Controller' not found говорит об отсутствии подключения библиотек (use Yii и так далее) - иллюстрация 0 |
|||||
69 | Разделы (темы) - администрирование - все темы в таблицу |
|
|||
На этом уроке мы выведем существующие темы в таблицу и зададим им элементы управления
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 29 мин. [Показать отчёт] Научился: Валерий Владимирович увеличил шрифт - стало удобнее считывать ввод с экрана Список тем для представления предоставляет ThemesController.php Полученный список в виде переменной (которые у нас без доллара не указываются ни при каких обстоятельствах) передается в рендер следующим аргументом, после индекса в квадратных скобках в виде поле =>имя переменной Указав тейбл-хавер через даблъю - думаю, чего это у меня полет над строками не подсвечивается - посмотрел, исправил на латинскую ви - вуаля, полет нормальный! |
|||||
70 | Разделы (темы) - администрирование - подтверждение удаления |
|
|||
На этом уроке мы реализуем алгоритм подтверждения удаления и создадим соответствующее представление
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 36 мин. [Показать отчёт] Научился: ссылки от представления ведут в Контроллер - там этим ссылкам соответствуют одноименные функции с предваряющим словом action в названии Если действие в контроллере выполняется над одной записью, то не забываем в эту функцию передать аргументом переменную с идентификатором Чтобы добраться до предыдущей страницы сайта используй конструкцию \Yii::$app->request->referrer; помещая её в переменную |
|||||
71 | Разделы (темы) - администрирование - удаление разделов и чистка связей |
|
|||
На этом уроке мы окончательно удалим раздел, а перед этим удалим все его связи с объявлениями
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 24 мин. [Показать отчёт] Научился: при удалении на сайте темы, не забывай удалять кроме экранных форм ещё и связи с таблицей setDeleteThemesBullRecord() удаляет тему в БД $theme->delete(); удаляет экранные формы сайта |
|||||
72 | Разделы (темы) - администрирование - Обычный ThemesForm |
|
|||
На этом уроке мы создадим модель ThemesForm, заготовку действия Add в контроллере Themes и представление под него
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 38 мин. [Показать отчёт] Научился: в представлении domains\bulletin\views\layouts\main.php если из оператора 'url'=>['/themes/index'], убрать квадратные скобки, то серая подсветка активного раздела деактивируется http://bull.local/themes/add возвращает 404, такой страницы ещё не создавали, надо вьюшку, контроллер и модель Контроллер в файле \controllers\BulletinsController.php - это новая функция actionAdd Представление - это будет \bulletin\views\themes\add.php для вывода на экран После создания двух вышеописанных объектов уде можно открывать страничку добавления темы (иллюстрация номер 0) Дальнейшее движение - создание правил для добавления темы (создаем модель с правилами - \models\ThemesForm.php ) В модели прописали правила (рулез) и атрибуты Сложности: В спешке вместо фигурных скобок открывая и закрывая функцию, поставил квадратные - поправил сначала на круглые, снова не то )) Лишь увидев от меня фигурные скобки, Нетбинс угомонился |
|||||
73 | Разделы (темы) - исправление подсчета и отображение текущей темы |
|
|||
Hа этом уроке мы исправим ошибку подсчета, обнаруженную в процессе прохождения курса, а также отобразим текущую тему, по которой выборка объявлений, в баннере Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 26 мин. [Показать отчёт] Научился: Степан и Ефим - самые активные курсанты на курсе "Доска объявлений" Степан обнаружил ошибку, Ефим локализовал Суть ошибки - при отключении просмотра объявления (перевод его в статус редактируемого черновика без публикации) в кнопке темы это объявление не минусуется Получается, пользователю сообщают о всех объявлениях, показывая не все из них Подсчет вызывается здесь \models\ThemesRecord.php Победили проблему вызвав функцию счета для другого метода, где темы с опубликованными топиками (getBullCurrTheme()) - иллюстрация номер ноль Попрощались с "Добрый день, tolya34!" в банере в угоду функциональности - вывели на его месте название выбранной темы Банер удалили здесь - \views\layouts\main.php Новый вывод создали флешкой в контроллере сайта (иллюстрация 1) |
|||||
74 | Разделы (темы) - администрирование - "темное" представление |
|
|||
На этом уроке мы создадим поля для редактирования или добавления темы в представлении themes\add
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 27 мин. [Показать отчёт] Научился: заголовок в форме добавления и редактирования тем выполнили бутстрапом и хлебными крошками Чтобы использовать переменные в представлении, не забудь передать их из контроллера \controllers\ThemesController.php Передача полей делается в функции function actionAdd контроллера тем (иллюстрация номер ноль) Заметил что CTRL+S сохраняет лишь в открытом окне, нажатие же на дискетку сохраняет изменения во всех окнах нетбинса |
|||||
75 | Разделы (темы) - администрирование - волшебный выпадающий список |
1 тест |
|||
На этом уроке мы создадим выпадающий список выбора родительской темы
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 22 мин. [Показать отчёт] Научился: через переменную $items загрузили в выпадающее меню поля id и title из ThemesRecord ArrayHelper мапит в переменную $items содержимое всех записей из модели ThemesRecord ЗЫ Утром в газете - вечером в куплете. Только сегодня читая "РНР7 в подлиннике" про селекты и опшны, вечером это же вижу в уроке! Теория подкрепляется практикой. Спасибо! |
|||||
76 | Разделы (темы) - администрирование - сохранение темы |
|
|||
На этом уроке мы реализуем сохранение добавляемых и редактируемых тем
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 51 мин. [Показать отчёт] Научился: сохранение новой добавленной темы выполняется в ThemesController функции actionAdd В указанной функции после двух проверок(на метод пост и на валидность ввода) выполняются четыре оператора: в переменную инициализируется новый объект ThemesRecord туда же записывается текущий ввод темы сохраняется и редиректится на новый экран Поскольку в модели ThemesRecord ещё не было функции setNewRecord - добавили и её Редактирование темы выполняется там же, в actionAdd |
|||||
77 | Разделы (темы) - администрирование - рефакторинг и валидация |
|
|||
На этом уроке мы сделаем рефакторинг нашего представления add и валидацию данных формы ThemesForm
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 21 мин. [Показать отчёт] Научился: перенося операторы в другой файл обращайся к ним через название функции, в которую их там поместил Оператор либо сразу возвращай ритёрном, либо помещай в переменную, которую не забудь в конце функции вернуть Проверка на обязательное заполнение добавлена в модели ThemesForm.php в функции rules() |
|||||
78 | Связи объявлений и тем - заготовка |
|
|||
На этом уроке мы создадим действие в контроллере BulletinsController и представление, которые помогут нам работать со связями объявлений и тем Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 30 мин. [Показать отчёт] Научился: открывая теги не забывай их закрывать (я отключил автозаполнение в нетбинсе, и за этим приходится следить самому) Добавив кнопку в представление, идем делать модель с правилами для этой кнопки Заодно в контроллере \controllers\BulletinsController.php создаем функцию по обработке нажатия кнопки "Темы" Invalid argument supplied for foreach() - такая ошибка возвращается, если в фориче накалякал <?php foreach ($currBulletins->themesbulletins as $tb) вместо <?php foreach ($currBulletin->themesbulletins as $tb) |
|||||
79 | Связи объявлений и тем - добавление новой темы |
|
|||
На этом уроке мы научим нашу систему добавлять новую тему в объявление (делать связь темы и объявления)
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 2 мин. [Показать отчёт] Научился: После создания модели с рулезами и атрибутами не забываем создать экземпляр этой модели в контроллере В контроллере в функции добавления темы создали экземпляр того файла и передали его в рендер для представления пользователю Ошибка Class 'app\models\Bulletins' not found говорит о том, что в модели \models\ThemesbulletinsRecord.php неверно указаны в рулезах целевые классы |
|||||
80 | Связи объявлений и тем - темы, которых не было |
1 тест |
|||
На этом уроке мы научим нашу систему выводить в список добавляемых в объявление тем только те, которые не прикреплены к нашему объявлению
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 29 мин. [Показать отчёт] Научился: удаление из выпадающего меню уже добавленных тем к текущему объявлению выполнили так: В модели в функции получения листа тем в переменную записали все темы, у которых идентификатор приходит из параметров функции Если не нужны все поля, а только одно, то применяется селект Если требуется псевдоним или алиас, поле можно переименовывать через AS так: 'themes_id as id' Выборка по ->where(['in','id',$tb]) применяет три параметра через запятую - "включительно", "по какому полю", "имя переменной-источника" Обратное включительному будет "not in" |
|||||
81 | Связи объявлений и тем - темы, которых не будет |
|
|||
На этом уроке мы научим нашу систему удалять из объявлений темы, к которым наше объявление привязывать не надо
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 39 мин. [Показать отчёт] Научился: добавил в представлении addtheme гиперссылку href="/bulletins/deletetheme... - иди в контроллер делать активацию работы этой гиперссылки Контроллер выбери BulletinController и там добавляй одноименное действие (функцию) с предшествующим словом экшн в названии Контроллер таким образом оживляет вьюшку приказывая системе что предпринять при нажатии пользователя на эту гиперссылку В функции контроллера ищем тему по идентификатору, обязательно одну, не массивом, применяем к ней функцию удаления и редиректим на ту же страницу с текущей темой Конкатенация в РНР указывается точкой - не забывай тчк между строкой и переменной |
|||||
82 | Глобальный поиск - поле поиска в меню |
|
|||
На этом уроке мы добавим поле поиска в навигационное меню сайта, а также решим вопрос с активными пунктами меню.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 9 мин. [Показать отчёт] Научился: видишь ошибку - чеши в F12 браузера и смотри стили - в имени класса ищи адрес, толкай его в файл стилей (у нас это D:\OSPanel\domains\bulletin\web\css\site.css) и задавай этому классу те свойства, что считаешь правильными Открывая ActiveForm() бегином не забывай и закрывать оную эндом Параметры открытия указывай в круглых скобках не забыв ещё и квадратные |
|||||
83 | Глобальный поиск - ищем глобально |
|
|||
На этом уроке мы создадим алгоритм поиска по вводимому в поле search контенту
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 30 мин. [Показать отчёт] Научился: при наличии в Представлении ссылки на отсутствующий Контроллер, переход по такой ссылке вернёт привычный код 404 'AND' это логическое умножение(булевское) принимает ИСТИНА если верно и первое значение операнда и второе одновременно 'OR' - булево сложение, тут для ИСТИНЫ достаточно хотя бы одного из операндов |
|||||
84 | Расширенный поиск - группировка пунктов главного меню |
|
|||
На этом уроке мы сгруппируем пункты главного меню в подразделы, и сделаем в нем ссылку на страницу расширенного поиска Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 38 мин. [Показать отчёт] Научился: менюхи на главной странице выполнены в виде виджета навбар через ассоциированные массивы ярлык(лейбл) => Название менюхи на пятой минуте видео очень жаль, что подсказки по поиску лишней скобки не принимаются ))) Но процесс творческий сложнее ученического, просто смотрим и учимся, как же на самом деле ищут ошибки, как идут не всегда верным путем, и тот кто не сдается ошибку находит На восьмой минуте лишняя скобка обнаружена и аннигилирована! Проблема крылась в копировании готового оператора- захватили лишний знак при копипасте Внимательность - наше всё. |
|||||
85 | Расширенный поиск - заготовки и план |
|
|||
На этом уроке мы набросаем план будущей страницы расширенного поиска, а также создадим действие контроллера и заготовку представления расширенного поиска Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 34 мин. [Показать отчёт] Научился: план создал прямо в файле РНР потренировавшись в разметке HTML Не так и сложно тегами разбивать на строки, куда сложнее разбираться в переплетениях РНР кода и разметки, вот тогда внимательность не помешает, чтобы не прозевать открытые и закрытые конструкции в правильной структуре |
|||||
86 | Расширенный поиск - стили и форма |
|
|||
На этом уроке мы внесем исправления в стили субменю и сделаем модель формы расширенного поиска
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 43 мин. [Показать отчёт] Научился: Валерий дал хинт: если есть косяк со стилями (цвет не тот, размер иль шрифт) беги снова по F12 курсором в виде стрелки (вверху есть в стилях) к тому объекту, который требует вмешательства, смотри его идентификатор(по классу, id) копируй или записывай и бегом в файл стилей \bulletin\web\css\site.css и там прописывай желаемый стиль для этого объекта хоть отдельным, хоть через запятую добавь к уже имеющимся Создали форму для расширенного поиска, там проинициализировали переменные и функцию описывающую типы полей и их месаджи |
|||||
87 | Расширенный поиск - дизайн текстовых полей и кнопки |
|
|||
На этом уроке мы прокачаем навыки дизайна текстовых полей, создания активной формы в представлении, а также создания кнопки через хелперы yii2 Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 41 мин. [Показать отчёт] Научился: при клике на меню Расширенный поиск работает функция actionAdvsearch() сайтКонтроллера где создается в переменную $advSearch новая форма отсюда D:\OSPanel\domains\bulletin\models\AdvsearchForm.php Затем в рендер через запятую добавили эту переменную в виде ассоциированного массива ключом adv и значением в виде нашей новой переменной, получающей форму ($advSearch) Кнопку создали хелперами Html::submitButton После этого посмотрел код объекта кнопка (иллюстрация номер 0) хелперы создают тот же батон типа сабмит только своими средствами. а в итоге приводят туда же |
|||||
88 | Расширенный поиск - цена - выбор варианта |
|
|||
На этом уроке мы создадим систему управления выбором варианта поиска по цене
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 21 мин. [Показать отчёт] Научился: переключение подсветки текущей кнопки (аналог действия радиобатон) выполнили через джаваскрипт Класс прайсселект по кликувыполняет два оператора: первый удаляет класс Эктив у всех носителей класса прайсселект второй присваивает текущему прайсселекту класс Эктив Всё просто до безобразия ) Знание - сила! |
|||||
89 | Расширенный поиск - цена - невидимые поля |
|
|||
На этом уроке мы создадим невидимые блоки с полями поиска цены, которые становятся видимыми при нажатии определенного пункта навигатора
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 42 мин. [Показать отчёт] Научился: добавив поля в инициализацию переменных не забудь дописать их и в рулез Великая сила скрыта в стилях и классах - задал по имени класса display:none; и после обновления страницы элементы этого класса есть, но их не видно, как сусликов .ready функция отрабатывает по загрузке страницы .on('click' функция выполняется по клику ЛКМ |
|||||
90 | Расширенный поиск - дата публикации - виджет извне |
|
|||
На этом уроке мы установим в наш проект компонент jui от стороннего разработчика и создадим календарики для выбора дат Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 49 мин. [Показать отчёт] Научился: впервые понюхал композер ) Сие есть установщик пакетов для РНР и фреймворков Плясать надо от файла в нетбинсе D:\OSPanel\domains\bulletin\composer.json В раздел "require" через запятую добавляем ссылку на наш новый виджет Следующим шагом - в консоль проекта и вводим команду composer update - будет закачка обновлений и установка нового, если указал |
|||||
91 | Расширенный поиск - результаты выборки - частичное представление |
|
|||
На этом уроке мы рассмотрим возможность использования частичного представления в yii2-проекте и выведем в частичное представление карточку объявления
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 47 мин. [Показать отчёт] Научился: <?=$this->render('выведет любую вьюшку имеющуюся в проекте по имени Запись <?php for ($x=1; $x<4; $x++) { ?> <?=$this->render('test',['x'=>$x]) ?> <? } ?> вернет циклом три строки с содержимым вьюшки с именем тест и конкатенирует к её содержимому переменную х три раза по возрастанию |
|||||
92 | Расширенный поиск - генератор поиска - возвращение к SQL-запросу |
|
|||
На этом уроке мы создадим генератор отчета, используя работу ActiveRecord фреймворка yii2 c sql-запросами, и включим в него поиск по текстовым полям формы расширенного поиска Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 34 мин. [Показать отчёт] Научился: findBySql() позволяет возвращать выборку по правилам SQL .= или точка и равно - это оператор конкатенации добавляющий к переменной то, что справа от знака равно Создание запроса выполнено конкатенацией условий поиска в сиквел-запрос в случае если поле окажется не пустым |
|||||
93 | Расширенный поиск - генератор поиска - ограничивающие даты |
|
|||
На этом уроке мы добавим в генератор отчета расширенного поиска выборку по датам публикации Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 37 мин. [Показать отчёт] Научился: карточка объявления создается здесь - \views\site\bulletin.php Конкатенация в РНР не плюс равно, а точка - не забывай особенности персонал хоум пейджа Хочешь посмотреть, что возвращает сиквел-запрос, подправь имя переменной, чтобы вернулась ошибка - там и найдешь текст запроса для контроля его правильности создания |
|||||
94 | Расширенный поиск - генератор поиска - три вида цены и один POST |
|
|||
На этом уроке мы реализуем различные варианты выборки объявлений по цене и добавим их в наш генератор расширенного поиска Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 34 мин. [Показать отчёт] Научился: Если нужна новая переменная, инициализируй (объявляй её), записывай в рулез, и лишь затем используй Радиокнопки прописаны здесь - \views\site\advsearch.php В ветвлении свич-кейс не забываем ставить брейки, иначе помимо нужного, будет выполнено и дальее по строкам ниже |
|||||
95 | Обратная связь - свой сайт объявлений |
без видео |
|||
И снова обратная связь.Подумаем самостоятельно и ответим на вопросы: Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 55 мин. [Показать отчёт] Научился: 1. Как Вы назовете свой сайт объявлений? Название пока напрашивается для сайта "Чижик" в память о бывшей барахолке в Чижах (район города Кирова) во времена СССР. Сейчас никаких барахолок там давно уже нет, естественно ибо времена и нравы изменились. Если центральный рынок и сохранился, то такие как барахолка в Чижах, она лишь в памяти народной. 2. Какое доменное имя в сети у него будет? На первое время для работы в режиме тестирования и дальнейшего углубления в тему доменное имя будет как можно более кратким. В бытность мою сисадмином в одном банке с названием из тринадцати букв у меня был почтовый адрес, который мне крайне нравился своей краткостью. За давностью лет, думаю никакой тайны не открою и прежних инструкций не нарушу, если назову его без домена первого уровня. Адрес был такой da@wscb. и так далее. Прелесть короткого доменного имени в простоте запоминания. Просто в телефонном разговоре передать собеседнику имя из двух литер вместо нагромождения из "как доллар", низкое подчеркивание, йот как кочерга и прочих сложностей. Чем проще имя, тем легче запоминание. Вэка точка ком или fb.com лучшие тому подтверждения. В идеале я возьму доменное имя da.ru Но, понятно, что это дорого и пока нереально ) Посмотрел этот самый http://da.ru/ на предмет занятости - там уже продаваны доменных имен сидят ))) 3. Почему Вы так назвали свой сайт Название должно быть простым и запоминающимся. У имени есть предыстория, есть от чего оттолкнуться. Плюс для зацепки вспоминается песенка про чижика-пыжика, которому даже памятники есть в Ленинграде ) |
|||||
96 | Расширенный поиск - генератор поиска - показать, что нужно |
|
|||
На этом уроке мы реализуем отображение той вкладки поиска по ценам, по которой производился поиск Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 47 мин. [Показать отчёт] Научился: для актуализации состояния радиокнопки после возвращения результата расширенного поиска применили дополнительную переменную, которая принимает текущее состояние оператором в свичкейсе, это состояние и присваивается радиокнопке в представлении для пользователя, дабы не вводить его в заблужение В представлении \views\site\advsearch.php применили тернарный оператор для выбора состояния радиокнопки Запись ($adv->radio_=="1" ? true : false) читаем как "если поле радио в переменной адэвэ эквивалентно единице то ИСТИНА (кнопка активна) По аналогии добавили правила установки активной кнопки в контроллере \controllers\SiteController.php которые затем визуализировали пользователю в представлении \views\site\advsearch.php |
|||||
97 | Работа с документацией Yii2 |
|
|||
На этом уроке переходим на один из официальных сайтов по Yii2 и, пользуясь помощью документации, реализовываем одну из своих идей Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 2 час. 54 мин. [Показать отчёт] Научился: добавил хеширование пароля пользователя bcrypt через функцию crypt для генерации и проверки пароля Пишут, что алгоритмы md5 или sha1 уже недостаточно защищённые, что требует дополнительных мер безопасности Дополнительно подправил отображение карточки объявления (там где картинка накладывается на текст справа) - надо освежить в памяти бутстрап, жестко привязывать размер изображения в угоду лишь своему монитору - это половинчатое недорешение |
|||||
98 | Пользователи и роли - планирование ролевой модели |
|
|||
На этом уроке мы составим ролевую модель пользователей нашего сайта
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 20 мин. [Показать отчёт] Научился: как вариант, можно предусмотреть роль забаненного пользователя Продолжить рассмотрение темы можно с учетом активности как подтвержденных продавцов, так и учеток, замеченных в мошеннических операциях |
|||||
99 | Пользователи и роли - фильтры контроля доступа ACF - теория и эксперименты |
|
|||
На этом уроке мы рассмотрим принципы работы фильтров контроля доступа ACF
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 19 мин. [Показать отчёт] Научился: роли, помеченные @ - это зарегистрированные пользователи, помеченные знаком вопроса ? относятся ко всем юзерам поголовно behaviours - как я помню на заморском языке не что иное как поведения, задают эти поведения правила работы сайта с пользователем Добавив через запятую в 28-ой и 31-ой строках иллюстрации номер ноль строковую ссылку на расширенный поиск мы получаем переадресацию незарегистрированного пользователя на форму залогинивания после нажатия выпадающего меню "Расширенный поиск" |
|||||
100 | Пользователи и роли - фильтры контроля доступа ACF - фильтруем всё |
|
|||
На этом уроке мы сами создадим метод behaviors() в BulletinsController и зададим нужные фильтры для действий контроллера
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 4 час. 49 мин. [Показать отчёт] Научился: функция behaviours через указание имен функций этого же класса позволяет перекрывать или предоставлять доступ по ролям Собака - зарегистрированные пользователи, знак вопроса - все прохожие По аналогии продолжил перекрывать доступ в контроллерах, начиная с фотоконтроллера |
|||||
101 | Пользователи и роли - роли через RBAC - теория, установка и миграции |
|
|||
На этом уроке мы установим расширение RBAC, настроим подключение к RBAC и создадим базы для авторизации при помощи механизма миграции Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 3 час. 19 мин. [Показать отчёт] Научился: Миграция прошла успешно на втором ноуте, тютелька в тютельку Композитор не кривлялся, скачал нужные библиотеки и установка прошла на ура. Таблицы созданы. Сложности: В былые годы Игромистр рекомендовал сбыть на просторы старые ноуты и купить один на все вырученные сольдо. А тут старый ноут оказался целесообразнее новых двух. Вот и думай ) Отчего на соньке вайо не грузится компоузером сомпонента RBAC остается пока неясным. Вернусь домой попробую снова и опубликую скрин с ошибкой. Любопытно же понять, что не так. |
|||||
102 | Пользователи и роли - роли через RBAC - тесты и практика |
|
|||
На этом уроке мы создадим тестовые роли и разрешения, а также проверим работу контроллера согласно разрешений Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 22 мин. [Показать отчёт] Научился: создали новое представление - в контроллере новую функцию плюс файл РНР в представлениях и по ссылке можно уже открывать вьюшку В \controllers\SiteController.php создали экземпляр объекта authManager В этом экземпляре присвоили права, создали пару тестовых ролей и привязали их к двум пользователям (учетным записям из БД) Сложности: Понять, что для выполнения скрипта надо не просто обновлять страницу проекта, а именно http://bull.local/site/authinit обновлять и запускать скрипт тем самым )) Не сразу дошло |
|||||
103 | Пользователи и роли - роли через RBAC - вносим действия в план |
|
|||
На этом уроке мы добавим действия к ролям в нашей актуальной ролевой модели
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 24 мин. [Показать отчёт] Научился: от простого к сложному Любой пользователь без регистрации может знакомиться с контентом сайта Зарегистрировавшись можно создавать, публиковать, редактировать и снимать с публикации ТОЛЬКО СВОИ объявления про мопед Модератору добавлены права на редактирование и публикацию всех объявлений Админ может дополнительно удалять объявления и рулить темами Суперюзеру добавлен доступ напрямую в БД |
|||||
104 | Пользователи и роли - роли через RBAC - реализация плана |
|
|||
На этом уроке мы создадим актуальные роли и действия для пользователей нашего сайта
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 день 36 мин. [Показать отчёт] Научился: таблицы создаются при запуске файла в браузере успешно. Аргументы передаются по очереди, первый кому присваивается роль, второй аргумент - какая роль присваивается. Роль может присваиваться именем другой роли, в этом случае все права указанной роли наследуются целиком. Сложности: При сохранении проекта на гитхабе отчего-то не сохраняется папка vendor Вчера проект просто не стартовал, не понял почему, сегодня сверил содержимое проекта с архивным и нашел, что снова отсутствует в проекте папка vendor, подложил её и всё взлетело с первого раза. Взял вопрос на контроль, то ли по моему упущению она не загружена была на гитхаб, то ли есть иные причины, мне неизвестные пока Победить и эту багу было приятно. Валерию творческих успехов, всем бобра и качественных мопедов ))) |
|||||
105 | Пользователи и роли - ACF+RBAC - ограничим доступ к темам |
|
|||
На этом уроке мы реализуем ролевую модель для контроллера тем | |||||
106 | Пользователи и роли - управление ролями и привилегиями - контроллер и таблица ролей |
|
|||
на этом уроке мы создадим контроллер и представление для управления ролями | |||||
107 | Пользователи и роли - управление ролями и привилегиями - форма добавления роли |
|
|||
На этом уроке мы создадим действие добавления роли и форму добавления роли |
|||||
108 | Пользователи и роли - управление ролями и привилегиями - сохранение и удаление роли |
|
|||
На этом уроке мы реализуем сохранение роли, а также напишем алгоритм удаления роли | |||||
Итого: 108 видеоуроков |
23 час. 33 мин. 25 тестов |
3 чел. | |||
Финалисты: Жан, Николай Денисов, Tom . |