Обучение C#

Формула программиста

основатель — Волосатов Евгений Витольдович
Поздравляю с 1 сентября! Система начисления Байтов работает.
Open shop Доска объявлений

Доска объявлений

Создание Доски объявлений с использованием фреймворка YII2.

Автор: Жданов В.В.

Данный курс - практикум по созданию сайта с использованием фреймворка YII2.
Цель: создание небольшого сайта с нуля до "коробочного" варианта, готового к размещению на хостинге.
Теории здесь не много, больше практической работы по принципу: "произвел действие - получил результат".
Также по максимуму используем функционал фреймворка YII2.

Программируем - и кайфуем!



Список уроков | фото | видео

# Название видеоурока Видео / Тесты Решило Рейтинг Доступ
1 FREE О проекте и про инструменты 00:08:31
26 чел. ★ 4.8 Done
  На этом уроке мы рассмотрим тематику разработки и настроим инструменты


Отчёт отправил: 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 FREE Создание проекта YII2 00:13:49
1 тест
22 чел. ★ 4.8 Done
  На этом уроке мы создадим проект нового сайта, установим YII2 и запустим новый сайт на нашем локальном домене


Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 5 час. 50 мин. [Показать отчёт]
Научился: Apache NetBeans IDE 11.2 подключил к YII, не с первой попытки, но всё же Ключ cookieValidationKey внёс внутри апострофов, сохранил Осталось решить вопрос с локальным сервером Нашел статьи на хабре и не только - это будет не ОпенСервер, но суть локального сервера будет 
3 FREE Комфортная конфигурация 00:08:16
2 теста
21 чел. ★ 4.8 Done
  На этом уроке мы настроим удобные для человека ссылки и поменяем название сайта при помощи настроек config/web.php

Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 28 мин. [Показать отчёт]
Научился: локальный сервер поднял с помощью МАМР, преттиЮРЛ и заголовок "Доска объявлений" кириллицей установил .htaccess отвечает за базовые настройки сервера RewriteRule . index.php [L] обрезает index.php  в адресной строке RewriteCond %{REQUEST_FILENAME} !-d урезает путь до директории RewriteCond %{REQUEST_FILENAME} !-f урезает путь до файла 
Сложности: Мак сдался и запустил локальный сервер на МАМР - тот же пиашпиМайАдмин посмотрел, там доступен Буду пилить сайт дальше! 
4 FREE Схема базы данных 00:14:25
21 чел. ★ 4.8 Done
  На этом уроке мы создадим схему базы данных для нашего проекта
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 2 час. 45 мин. [Показать отчёт]
Научился: собрали план битвы для создания запросов SQL по первичному сооружению БД Приятно, когда получается! Тут песен просили - добавил в отчет )  
Сложности: Понять, что локальный сервер запустить на макОси не так уж и сложно при нынешней легкости доступа к информации 
Видеообзор: QqHIw7mw1qE
5 FREE Подключение к базе данных пользователя и миграция пользователей 00:13:36
1 тест
21 чел. ★ 4.8 Done
  На этом уроке мы создадим базу данных, подключим ее к нашему проекту и создадим таблицу пользователей
при помощи механизма миграций
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 2 час. 31 мин. [Показать отчёт]
Научился: таблица user с пятью полями в базе данных bulletinsdb создана успешно, но лишь в самом PHPMyAdmin Консоль с миграцией дружить не захотела, по ходу пьесы буду разбираться с этим вопросом Либо консоль не ту запускал, либо в другом каталоге орудовал, хотя переключение в каталог bulletinsdb в строке консоли отражалось, что вселяло надежду на успех Однако, финальная цель была достигнута, пусть и другим путем 
6 FREE Аутентификация - захешированный пользователь из БД 00:16:58
1 тест
20 чел. ★ 4.8 Done
  На этом уроке мы подкорректируем модель 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 FREE Информация о пользователе 00:13:28
19 чел. ★ 4.8 Done
  На этом уроке создадим таблицу и модель Информация о пользователе
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 56 мин. [Показать отчёт]
Научился: миграции работают - но тут много чести нет, просто поднял всё на окнах UserRecord создал, связь с UserinfoRecord тоже добавил 
8 FREE MVC - немного теории 00:12:09
1 тест
19 чел. ★ 4.8 Done
  На этом уроке мы рассмотрим теоретические основы работы MVC и создадим новый контроллер в нашем проекте
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 26 мин. [Показать отчёт]
Научился: представления - это странички сайта, которые вызываются из модели контроллером 
9 MVC - информация о пользователе 00:09:33
18 чел. ★ 5 Done
  На этом уроке мы получим данные о пользователе из базы в представление
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 48 мин. [Показать отчёт]
Научился: $currUser - в коде РНР не забывай, что переменные (имена) указываются начиная с символа доллара Видишь символ доллара в начале имени в РНР - это переменная Краткая форма вкрапления РНР кода в HTML разметку отделяется по краям так <?                    ?> Переменную $currUser получили из модели UserController методом find по номеру идентификатора 2, взяли одну запись 
Сложности: Спасибо подсказкам - наз на хэз поменял ))) 
10 Пользователь - кто зарегистрирован сейчас? 00:09:22
1 тест
18 чел. ★ 4.9 Done
  На этом уроке мы получим информацию о текущем зарегистрированном пользователе, а также сделаем рефакторинг кода

Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 47 мин. [Показать отчёт]
Научился: кнопка "Статистика и отчеты" к уроку - Ваш кладезь мудрости впередиидущих курсантов Столкнулся с проблемой вызова нестатического метода, возникла ошибка(иллюстрация номер ноль) Просмотрел, перенабрал - не помогло. Почитал комментарии с иллюстрации с ошибкой - причины в силу малоопытности не понял Стал смотреть отчеты впередиидущих - и о чудо, Степан уже в это упирался и даже при его заявленной неопытности в заморских языках, он нашел что метод(здесь они функциями называются) не имеет экземпляра и его просто можно в сигнатуре указать статическим и всё взлетит Так и сделал(следующая иллюстрация) - и всё взлетело. Остались два вопроса: - как Степан при том, что пишет в языках не силён, нашел ответ про сделать метод статиком - как у Валерия без статика всё сработало. Загадок две, ответа пока не нашел. 
11 Новый пользователь - заготовка и меню 00:09:17
18 чел. ★ 5 Done
  На этом уроке мы создадим действие и представление для добавления пользователя,
а также добавим пункт меню "Регистрация"
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 32 мин. [Показать отчёт]
Научился: информация по пользователю выводится на основании номера идентификатора, взятого из текущей сессии Двойное двоеточие :: это оператор разрешения области видимости ("Paamayim Nekudotayim"). Эта лексема, разрешает обращаться к статическим свойствам, константам, переопределенным свойствам, методам класса. views - layouts - main - это хидер(навбар) и футер, то что не меняется вслед за изменением контента страницы в центре 
12 Новый пользователь - модель для формы 00:15:43
1 тест
18 чел. ★ 5 Done
  На этом уроке мы создадим модель параметров формы добавления пользователя
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 31 мин. [Показать отчёт]
Научился: alt+shift+F - форматирование кода в нетбинс по правилам(хоткИ или "горячая клавиша" для причёсывания того, что наваял Начали создавать форму для заведения нового пользователя(форма регистрации) Поля сделали обязательными для заполнения, при обратном будет выведено сообщение 
13 Новый пользователь - дизайн формы начало 00:16:37
18 чел. ★ 5 Done
  На этом уроке мы зададим поля формы добавления пользователя
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 53 мин. [Показать отчёт]
Научился: ошибка в одной букве - и всё, нет отображения твоих изменений Хлебные крошки в коде написал как бредкрамПс вместо бреадкрамБс - искал, чего это у меня нет менюшек Будь внимателен, пиашпишник ) Наличие одного лишь пробела между стартом строки <? и знаком равно приводит к неинтерпретируемому коду РНР - нулевая иллюстрация(неверный код с пробелом) и первая(годный код и пробел удален) 
14 Новый пользователь - дизайн формы: поля и колонки 00:09:17
1 тест
18 чел. ★ 5 Done
  На этом уроке мы добавим все поля формы, кнопку сохранения, а также разместим поля в две колонки


Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 24 мин. [Показать отчёт]
Научился: как хорошо, когда ты уже проходил уроки Валерия по бутстрапу! Хотя бы тут нет вопросов ) Только написал вышеприведенную строку и давай пробовать как там бутстрап отработал - не отработал смотрю, нет двух колонок (нулевая иллюстрация) Ы-ы-ы, думаю, делил шкуру непойманного, только похвалился и вот те на - облом ) Потом вспомнил, что смотрел не на полный экран, а ведь бутстрап, он же про резиновую вёрстку, дай посмотрю на полный экран - вуаля! (первая иллюстрация - всё прекрасно делится на два поля 
15 Новый пользователь - сохранение нового пользователя 00:20:06
1 тест
18 чел. ★ 5 Done
  На этом уроке мы напишем алгоритм сохранения записи о пользователе и информации о нем
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 3 час. 33 мин. [Показать отчёт]
Научился: путь к экземпляру \app\models\ можно прописать в юзингах сверху, тогда указание на этот экземпляр доступно в краткой форме Too few arguments to function app\models\UserRecord::createUser() == Слишком мало аргументов для функции app \ models \ UserRecord :: createUser () Маловато предоставили - вот и ругается  
Сложности: Добавление после передачи аргумента в createUser($newUser); упёрлось в ошибку Искал причину и не находил. Отправил отчет с ошибкой и помощь пришла. Была вероятность, что отчет будет сминусован с невменяемыми и безответными комментариями и отправка его окажется мартышкиным трудом. Но, к счастью, отчет попался на глаза коллегам, которые увидели мою оплошность и указали мне на неё. Вот здесь я и снова прочувствовал пользу от прохождения курса коллективно - ошибка оказалась в написании имени переменной с ошибкой, а я видимо замыленным глазом смотрел и не видел, ведь пересматривал же я этот участок кода и бесполезно. Поправил регистр одной лишь буквы и всё сработало! Спасибо, это было поучительно! 
16 Красивая аутентификация на сайте 00:07:37
18 чел. ★ 5 Done
  На этом уроке мы поменяем дизайн формы входа на сайт
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 8 мин. [Показать отчёт]
Научился: русифицировали страницу входа на сайт с помощью функции attributeLabels() взяв часть полей по образцу юзерФорм Часть настроек была выполнена в файле D:\OSPanel\domains\bulletin\views\site\login.php 
17 Что доступно Юпитеру? 00:10:21
1 тест
18 чел. ★ 5 Done
  На этом занятии мы научимся управлять доступом к пунктам главного меню
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 45 мин. [Показать отчёт]
Научился: начали использовать созданную прежде авторизацию на сайте - разграничили области видимости базового представления (менюшки Контакты) Расположение для редактирования - D:\OSPanel\domains\bulletin\views\layouts\main.php Восклицательный знак перед оператором привычно означает логическое отрицание 
18 Объявления - создание базы и модели 00:09:51
1 тест
18 чел. ★ 5 Done
  На этом уроке мы создадим таблицу bulletins при помощи миграций и сгенерируем для данной таблицы класс ActiveRecord
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 21 мин. [Показать отчёт]
Научился: миграции отработали, в генераторе модели создали новую модель, проверили её наличие в нетбинс Миграция создает пхп файл в нетбинсе, его правим как надо и после запуска результат виден в БД через phpMyAdmin 
19 Объявления - контроллер, представление и много записей 00:13:46
1 тест
18 чел. ★ 5 Done
  На этом уроке мы создадим контроллер и представление для работы с объявлениями,
а также сделаем связь записей о пользователях и объявлениях типа "один-ко-многим"
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 36 мин. [Показать отчёт]
Научился: один пользователь может создать много объявлений, но одно объявление может создать лишь один пользователь, не двое и не трое Один ко многим делается в D:\OSPanel\domains\bulletin\models\UserRecord.php методом хэзМэни Снова запнулся за регистры при наименовании методов - public function actionIndex() - не так регистры при том же имени и вуаля - пейдж нот фаунд к Вашим услугам!  
20 Объявление - функциональный дизайн страницы 00:14:17
17 чел. ★ 5 Done
  На этом уроке мы сделаем дизайн страницы наших объявлений, который поможет нам работать с объявлениями в дальнейшем
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 32 мин. [Показать отчёт]
Научился: статусы объявлений предусмотрены в трех видах - черновик, опубликованное и удаленное Оператор hover позволяет применять к объекту вебдизайна свойство(какое привяжешь) которое активируется при наведении на него указателя мыши (ховеркрафт - по великобритански это вертолёт, как бы мышь пролетает над тем объектом и отрабатывает действие, которое ты привязал к этому событию ховера) 
21 Объявление - ограничение доступа 00:09:25
17 чел. ★ 5 Done
  На этом уроке мы ограничим доступ неавторизированного пользователя к странице управления объявлениями, а также решим некоторые технические вопросы
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 27 мин. [Показать отчёт]
Научился: чтобы неавторизованный пользователь не создавал объявлений сделали в контроллере оператор редиректа на страницу авторизации для юзеров которые isGuest tr == table row строка таблицы td == table data данные таблицы  
22 Объявление - поля для пользовательских форм 00:09:44
17 чел. ★ 5 Done
  На этом уроке мы создадим класс BulletinsForm и определим, какие поля будут использоваться при создании объявления

Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 24 мин. [Показать отчёт]
Научился: массивами задали новые поля в форме создания объявления 
Сложности: главное - не запутаться в квадратных скобках и открывая их, не забывать закрывать 
23 Объявление - форма добавления объявлений 00:17:03
1 тест
17 чел. ★ 5 Done
  На этом уроке мы создадим представление для добавления объявлений и действие контроллера, запускающего это представление

Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 42 мин. [Показать отчёт]
Научился: Format в контекстном меню выравнивает весь открытый файл по правилам форматирования разметки для удобства чтения В контейнеры див передаётся переменная форм как поле с атрибутами модели и её поля с выводом в текстовое окно ввода 
24 Объявление - сохранение в черновик 00:10:39
17 чел. ★ 5 Done
  На этом уроке мы реализуем механизм сохранения нового объявления в черновик
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 24 мин. [Показать отчёт]
Научился: в контроллере объявлений добавили проверку на метод отправки нового объявления post Запись в БД про дом Гусляра добавилась - счастье в сердце почувствовал )) 
25 Объявление - список 00:18:42
15 чел. ★ 5 Done
  На этом уроке мы реализуем вывод сохраненных в базе объявлений в список
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 57 мин. [Показать отчёт]
Научился: сохранение в БД != наличию записи на сайте, об этом надо позаботиться отдельно Гостю не дозволено будет добавлять объявления, в этом случае перенаправляем его на страницу авторизации <?php { ?> затем может быть куча строк с  html-разметкой а затем где-то ниже будет так <? } ?> С непривычки дико выглядит и сначала сбивает с толку  
26 Объявление - всё на публику 00:12:16
1 тест
15 чел. ★ 5 Done
  На этом уроке мы сделаем наши объявления опубликованными
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 25 мин. [Показать отчёт]
Научился: для публикации находится одна запись по id, выполняются функции setPublic(); и save(); а затем перекидывает на /bulletins/index 
27 Объявление - публикация на главной странице 00:15:27
1 тест
15 чел. ★ 5 Done
  На этом уроке мы разместим наши опубликованные объявления на главной странице сайта
Отчёт отправил: 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 Объявление - скрыть нельзя удалить 00:12:40
14 чел. ★ 5 Done
  На этом уроке мы реализуем возможность помещать объявления в группу удаленных, восстанавливать их оттуда, а также отключать их просмотр

Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 25 мин. [Показать отчёт]
Научился: D:\OSPanel\domains\bulletin\views\bulletins\index.php - представление со списком объявлений для публикации, редактирования и удаления Добавили функционал удаления и восстановления объявлений 
29 Объявление - статусный рефакторинг 00:08:45
1 тест
14 чел. ★ 5 Done
  НА этом уроке мы сделаем рефакторинг методов работы со статусом объявлений
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 21 мин. [Показать отчёт]
Научился: рефакторинг актуален и в РНР Выбор варианта выполнили ветвлением ифами-элзами с передачей ключевого аргумента в метод(указали его вторым аргументом в сигнатуре) Теперь вместо повторяющегося кода в функциях экшенов всего лишь меняли статус выбирая объект по идентификатору и применяя ему значение в одинарных апострофах setStatus($id, 'public'); - вызываемому методу передаются здесь два аргумента в скобках, а именно переменная(в РНР они пишутся со знака доллара обязательно) и значение(значения указываются в одинарных кавычках или апострофах) 
30 Объявление - рефакторинг редактирования 00:12:58
14 чел. ★ 5 Done
  На этом уроке мы реализуем редактирование путем небольшого видоизменения функции добавления записи
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 35 мин. [Показать отчёт]
Научился: способ отключения функции по умолчанию - присвоить переменной отрицательное значение(из разряда невозможных в нормальной работе кода)- вариант -1 равнозначен отключению по умолчанию при этом значении работы функции до присвоения ей принудительно действительно актуального значения идентификатора Добавили ветвление в функцию actionAddbulletin - в зависимости от статуса и идентификатора выполняются разные действия над выбранным объявлением 
31 Объявление: запрос - в функцию & кнопка для изображений 00:09:52
14 чел. ★ 5 Done
  На этом уроке мы сделаем рефакторинг метода index и добавим кнопки для перехода в режим работы с изображениями
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 40 мин. [Показать отчёт]
Научился: если в сигнатуре функции аргумент уже указан со значением по умолчанию, то при вызове этой функции для случая значения по умолчанию, аргумент в круглые скобки не пиши - излишне Выполняя действия над данными в функции, не забывай присваивать результат обработки какой-либо переменной и в конце возвращай её из функции, иначе результат обработки повиснет в воздухе Можно и сразу возвращать ритёрном, без переменной, если не ошибаюсь, по аналогии с Джавой  
32 Изображения - микс из миграций 00:12:35
14 чел. ★ 5 Done
  На этом уроке мы через механизм миграций создадим таблицу photo и добавим поле для аватары в таблицу bulletins
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 31 мин. [Показать отчёт]
Научился: миграцией создали новую таблицу --fields=avatar:integer в качестве параметра консоли для команды миграции создает заготовку добавления поля в имеющейся таблице yii migrate без дополнительных параметров стартует ранее подготовленные миграции в работу  
33 Изображения - снова MVC 00:10:47
14 чел. ★ 5 Done
  На этом уроке мы создадим модель, контролер и представление для работы с фото
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 26 мин. [Показать отчёт]
Научился: модель создаем с помощью браузерного мастера новых моделей /gii/model В результате его работы создается файл models\PhotoRecord.php Важно: один-ко-многим == одно объявление может включать много фото Но, одно фото не может принадлежать многим объявлениям! Реализация в коде выглядит так: $this->hasMany(PhotoRecord::classname, ['bull_id','id']); Для перехода по ссылке в проекте должен быть в наличии соответствующий контроллер $this->render('index'); А представление(вьюшка) уже займется выведением всего вышесозданного в браузер  
34 Изображения - работа с моделью 00:17:16
14 чел. ★ 5 Done
  На этом уроке мы передадим модель нашего объявления в представление
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 46 мин. [Показать отчёт]
Научился: ['bull_id'=>'id'] эта запись значит, что ассоциированный ключ 'bull_id' принимает значение => этого аргумента 'id'  
35 Работаем над ошибками - YII2 в помощь 00:13:03
14 чел. ★ 5 Done
  На этом уроке мы разберемся, как работать над ошибками и читать сигналы дебаггера 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 Изображения - где живут картинки 00:15:34
1 тест
14 чел. ★ 5 Done
  На этом уроке мы создадим папку для изображений, разместим там изображение по умолчанию, а также создадим универсальные параметры пути и изображения по умолчанию
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 35 мин. [Показать отчёт]
Научился: определили папку для фотоиллюстраций к объявлениям D:\OSPanel\domains\bulletin\web\images Место для хранения глобальных параметров здесь: D:\OSPanel\domains\bulletin\config\params.php В контроллере создали переменные, принимающие данные о пути и имени картинки из параметров и передали их модели через рендер В индексе после этого в блоке РНР путь стал таким - '<?=$path.$no_photo?>' Коротко и удобно 
37 Изображения - модель формы 00:11:10
14 чел. ★ 5 Done
  На этом уроке мы создадим модель PhotoForm для работы с изображениями

Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 43 мин. [Показать отчёт]
Научился: юзинги указываются после неймспейса(пространства имен) Если при создании РНР-файла в контексте выбирать не просто файл РНР, а РНР-класс, в заготовке сразу появляется шапка из пространства имен и шаблон класса Для картинок будут использоваться три поля - имя $file, путь $link и пояснение $info 
38 Изображение - загрузочное представление 00:15:37
14 чел. ★ 5 Done
  На этом занятии мы создадим форму представления, через которое будет загружаться изображение

Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 36 мин. [Показать отчёт]
Научился: чтобы контроллер мог оперировать моделью фотоФорм и фотоРекорд - пишем юзинги про них в контроллере Выбор картинки реализовали блоком РНР fileInput() - определяет файл с изображением textarea() - создает текстовое поле для комментария к изображению submitButton() с аргументами рисует кнопку подтверждения добавляемой картинки 
39 Изображение - загрузка файла на сайт 00:17:29
1 тест
14 чел. ★ 5 Done
  На этом уроке мы реализуем алгоритм загрузки изображений на сайт
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 11 мин. [Показать отчёт]
Научился: научили класс PhotoForm загружать в проект картинку time() возвращает текущее количество миллисекунд от создания ОС Юникс Ошибка добавления фото на 10-ой минуте добивается до победы в 16:24, помимо подсказки Степана, она тоже помогла и обнадежила, последней гранатой в окоп врага, простите, ошибки кода, было удаление слеша перед images/ в переменной 'imagePath' в файле конфига D:\OSPanel\domains\bulletin\config\params.php  
40 ПРОМЕЖУТОЧНЫЙ ВИДЕО ОБЗОР без видео
11 чел. ★ 5 Done
  Мы уже многое сделали на нашем видеокурсе, и автору очень важно
узнать Ваше мнение о данном курсе и получить обратную связь
в форме видео-презентации и ответов на вопросы.

Сделай видео-презентацию своего сайта.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 13 мин. [Показать отчёт]
Научился: работа на разных компах приводит к неожиданным результатам Чему научился за отчётный период имею доложить следующее: Код РНР встраивается в документ HTML и наоборот. О границах: начало кода РНР можно распознать по слитному сочетанию пяти знаков <?php то есть меньше, знак вопроса и три малые литеры php Окончание кода РНР может отсутствовать, но если начинается блок HTML-разметки, то обязательно встретится слитное (без пробелов) сочетание двух знаков "вопроса" и "больше" вот так: ?> YII(yes it is) использует концепцию MVC Модель рулит правилами View - видит пользователь в браузере Контроллер передает правила от Модели к Представлению Работа крайне аккуратно должна выполняться - один лишний пробел или незакрытая скобка, не тот регистр в имени переменной или класса и всё - код нерабочий, страница не отображается Но есть плюшка - встроенный дебаггер, подсказывающий в каком файле искать и на какую строку обратить внимание, выводимый вместо сбойной страницы после обновления Нравится краткость видеоуроков, при их продолжительности удобнее подбирать время для занятий Сейчас выходные, но они не вечны и скоро краткость Валерия будет на вес золота с приходом будней, когда звонит звонок и надо всё бросить и лететь куда скажут ) В проект хочу добавить хостинг и покупку домена, в прошлом году такое делал, надо повторить и поиграть с боевым сайтом, составить конкуренцию Авито ))) Догнать и перегнать, как учила нас партия))) Продолжение такого яркого курса конечно же нужно, интересно посмотреть на реализацию способностей коллег Всем удачи и сбычи мечт в области интеллектуального роста! 
Сложности: Звук пришлось накладывать в ютубе - ноут, что делает сейчас работы по курсу с виндой 32 бита, микрофон в системе отсутствует, записал на нём видеоряд, аудио наложил в редакторе ютуба Мак, где со звуком всё в порядке, пока не заборол миграции, оттого видео не с него 
Видеообзор: nHk0n-ysDWI
41 Изображение - сохранение пути в базу 00:14:17
11 чел. ★ 5 Done
  На этом уроке мы реализуем сохранение пути к файлу изображений в базу данных
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 51 мин. [Показать отчёт]
Научился: грохнули добавленные на позапрошлом уроке фото из проекта здесь D:\OSPanel\domains\bulletin\web\images\DSC06577_1578419736.jpg и т.д Для отображения аватара добавленной картинки требуется лидирующий слеш в указании источника картинки <img src="/<?=$photo_->link?>" alt="no_photo" > Помимо добавления фото на сайте и в проекте, записи о добавленных фото заносятся в БД bulletins 
42 Изображение - управление картинками 00:08:36
11 чел. ★ 5 Done
  На этом уроке мы займемся дизайном - создадим выпадающее меню управления изображением
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 29 мин. [Показать отчёт]
Научился: отбутстрапили форму добавления фото (я всё прилично выражаюсь))) <div> - контейнер для размещения объектов на странице поблочно data-toggle - атрибут переключающий данные, к примеру выпадающее меню получится, если присвоить ему значение дропдаун <span> очень похож на элемент <div>, но <div> является блочным элементом, в то время как <span> является строчным <ul>  - маркированный список, у которого каждый элемент должен начинаться с тега <li>. Если к тегу <ul> применяется таблица стилей, то элементы <li> наследуют эти свойства <li> - отдельный элемент списка <a> - предназначен для создания ссылок 
43 Изображение - JS - немного теории и пижонства 00:16:29
1 тест
11 чел. ★ 4.7 Done
  На этом уроке мы рассмотрим работу JS на yii2
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 39 мин. [Показать отчёт]
Научился: изначально javaScript писался для браузера NetScape Сервис -> Параметры -> Редактор -> "Автозавершение кода" и "Подсказки" - место для посмотреть, если достали нетбинсовские подсказки вечно всплывающие и накидывающие не то что надо Блок джаваскрипта внутрь блока РНР вставляем через такое обозначение: $script = <<< JS ... JS; При указании обращения к объекту по идентификатору не забывай перед именем указать диез #  
44 Изображение - JS - глобализация 00:26:49
11 чел. ★ 5 Done
  На этом уроке мы перенесем все скрипты JS в отдельный файл, а также реализуем открытие и скрытие элементов ввода информации

Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 10 мин. [Показать отчёт]
Научился: писал-писал весь урок комментарии, нажал эф5 и всё коту под хвост по уроку всё прошло успешно 
45 Изображение - JS - сохранение информации в базу 00:22:42
1 тест
11 чел. ★ 5 Done
  На этом уроке мы научим нашу систему сохранять информацию об изображениях в базу
с использованием технологии ajax


Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 51 мин. [Показать отчёт]
Научился: ctrl+F5 - обновление страницы с подчисткой кэша Значения переменных в массивах указываются через двоеточие Видишь двоеточие в массиве - после него значение той переменной, имя которой указано до двоеточия В сотый раз себе напишу - перед именами переменных РНР не забывай доллары вписывать, а то переменные работать без долларов отказываются 
46 Изображение - JS - извлечение методом ajax 00:09:51
11 чел. ★ 5 Done
  На этом уроке мы научим ajax получать информацию об изображениях из базы
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 23 мин. [Показать отчёт]
Научился: перезагрузка страницы оператором $('body').load('/photo/index') приводит к отключению функционала кнопки записи комментария в базу замена его на оператор location.reload(); приводит к автоматическому обновлению страницы 
47 Изображение - аватарка - вывод на главной странице 00:15:26
11 чел. ★ 5 Done
  На этом уроке мы реализуем вывод главных изображений каждого объявления
(далее - аватарки) на главной странице
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 34 мин. [Показать отчёт]
Научился: чтобы отобразить аватар объявления на главной странице - поставили тестом тройку идентификатор фото в поле аватар таблицы объявлений в строке о продаже авто - добавили в модели объявлений в метод рулз поле аватар - в лейблы также добавили отсутсвующий аватар Вызов метода(функции) отличается от вызова поля наличием круглых скобок после имени метода(функции)  
48 Изображение - аватарка - работа над ошибками связей 00:09:33
11 чел. ★ 5 Done
  На данном уроке мы исправим ошибки вывода фотографий, очистим базу и заново загрузим в нашу базу
фотографии в одно из объявлений
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 26 мин. [Показать отчёт]
Научился: в ФотоКонтроллер добавили проверку на авторизацию пользователя и если не регистрировался - изволь, заполняй формуляр) 
49 Изображение - аватарка - как стать главной 00:18:13
11 чел. ★ 5 Done
  На этом уроке мы создадим код, делающий любое фото главным
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 45 мин. [Показать отчёт]
Научился: удалили из проекта повторяющиеся фото - искать проще по добавленному времени создания в миллисекундах которое - выбираем из одинаковых начинающихся названий фото то, у которого время миллисекунд меньше - фото было добавлено раньше и грохаем его Кнопке "Сделать главной" добавили в свойства класс, идентификатор фото и идентификатор текущего объявления Вызов функции в джаваскрипте выполняем по классу - имя класса указываем с лидирующей точкой 
50 Изображение - удаление - ни шагу без подтверждения! 00:09:13
11 чел. ★ 5 Done
  На этом уроке мы реализуем всплывающее окно подтверждения действия
и протестируем результаты выбора различных вариантов
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 24 мин. [Показать отчёт]
Научился: реализовали проверку удаления с алертами сообщающими о выборе 
51 Изображение - удаление - удаление файла и записи 00:15:49
11 чел. ★ 5 Done
  На этом уроке мы реализуем удаление файлов изображений и записей о них из базы данных
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 13 мин. [Показать отчёт]
Научился: создав в аяксе url:"setdelete", не забывай в фотоконтроллере сделать функцию экшнСетделет В который раз пишу для себя - следи за именами классов и переменных, не забывай давать доллары долларовладельцам, а переменным в РНР - значки доллара! Иначе ничего у тебя, дружище, работать просто не будет! Проверено электроникой ) Многострочный комментарий в нетбинсе начинай с /* и заканчивай так */ Следующая забава, возможно подстерегающая не только меня, заключается в моменте видеоурока 9 минута 35 секунд - когда мы алертом получаем путь до переменной возвращая $photoRec->link; В браузере Мозилла Файрфокс возвращается ошибка, а в ГуглХроме - прекрасно возвращается путь, как у Валерия! (иллюстрация к уроку номер 0) Если кликнуть по трилистнику в браузере внизу справа, то открывается окно дебага http://bull.local/debug/default/index Тут вся подноготная -читай да анализируй на славу 
52 Главная страница - подробности - ссылки и заготовка представлени 00:09:05
11 чел. ★ 5 Done
  На этом уроке мы создадим ссылки для объявлений на главной странице и заготовку представления для подробного вывода
информации объявления
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 27 мин. [Показать отчёт]
Научился: из представления D:\OSPanel\domains\bulletin\views\site\index.php сделали ссылку на контроллер для оживления нашего ховера "Подробнее" Применяй в гиперссылке на индексе дефис между словами, которые в Контроллере у тебя с большой буквы в названии вызываемой функции 
53 Главная страница - подробности - больше подробностей 00:11:37
11 чел. ★ 5 Done
  На этом уроке мы выведем максимум информации на страницу подробностей объявления
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 44 мин. [Показать отчёт]
Научился: тег источника картинки не требует обязательного закрытия, судя по финалу видео <img src= у Валерия в конце видео без закрывающего > отрабатывает на ура У себя закрыл этот тег, на скриншотах видно, и тоже отрабатывает без вопросов Видимо не всякий тег требует непременного закрывающего >  
54 Главная страница - подробности - расширяя информацию 00:15:15
1 тест
11 чел. ★ 5 Done
  На этом уроке мы внесем в наш код изменения, которые позволят сохранять объявления с большим количеством информации

Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 5 мин. [Показать отчёт]
Научился: функция safeDown() в теле миграции нужня для отката неудачного изменения обратно либо просто информирования об ошибке Второй фильтр на длину пояснения к объявлению стоял здесь D:\OSPanel\domains\bulletin\models\BulletinsRecord.php В методе рулез грохнули этот оператор , 'max' => 255 ибо он ограничивал длину текста даже для ЛОНГТЕКСТА не более 255 символов $this->info=    nl2br($bull->info); исправляет форматирование абзаца текста  
55 Главная страница - оформление - дизайн объявления 00:10:02
11 чел. ★ 5 Done
  На этом уроке мы зададим стиль дизайна объявления
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 32 мин. [Показать отчёт]
Научился: после перенесения блока информации <?=$bulletin->info?> в отдельный див убрали у него блок параграфа за ненадобностью <span class="badge"> дает на странице прекрасный овал фоном В таблице обязаны быть  <tr> - тейблроуы) То есть строки и тейблдаты - <td> в которые уже и помещаем информацию таблицы 
56 Главная страница - оформление - дизайн элементов базовой страницы 00:11:44
1 тест
11 чел. ★ 5 Done
  На этом уроке мы выведем информацию о себе в элементе 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 Главная страница - оформление - ловим цвет пикселя 00:06:00
11 чел. ★ 5 Done
  На этом уроке мы рассмотрим использование инструментов определения цвета пикселя (Пипетка)

Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 15 мин. [Показать отчёт]
Научился: цвета по палитре #FFF - черный #000 - белый пипетка онлайн гуглится Если не годится встроенная в Мозиллу пипетка, можно воспользоваться онлайн анализаторами цвета, тоже прекрасно работают 
Сложности: Понять, зачем в разделе "Самостоятельная работа" пункты  3. 4. 5. ведь они пустые! 
58 Главная страница - оформление - смотрим все изображения 00:15:27
11 чел. ★ 5 Done
  На этом уроке мы реализуем просмотр всех изображений объявления "не хуже, чем на Avito"
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 34 мин. [Показать отчёт]
Научился: ночами лучше работается - урок записан Валерием в половину третьего ночи 9 октября! Вот кто рано встаёт... РНР код разрывается, если внутри нужна HTML-разметка так <?php........здесь код пиашпи {?> тут разметка страницы <? }?> - так закрыли блок Ховер прекрасен - обновляется картинка даже если окно неактивно (лежит под другим как на иллюстрации за номером 1) 
59 Главная страница - оформление - стильный логотип 00:09:56
11 чел. ★ 5 Done
  На этом уроке мы реализуем вывод логотипа в иконку проекта и в пункт меню перехода на главную страницу
Отчёт отправил: 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 Главная страница - оформление - оповещения через баннер 00:11:19
10 чел. ★ 5 Done
  На этом уроке мы создадим баннер для оповещений, новостей
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 39 мин. [Показать отчёт]
Научился: банеры нужны для принудительного предоставления информации пользователям Та информация, которой они интересуются находится ими методом серфинга по сайту, а вот то, чего они знать не могли, но мы хотим им донести - вот для этого и будет нужен банер. Это как банеры вдоль дороги - мы едем себе по своим делам, нам Толи и Васи с их днями рождения и свадьбами неинтересны, но мы про эти события узнаем из банеров. Не злоупотребляйте банерами, коллеги! Не становитесь спамерами ))) А вот банер, который сообщает о ремонтных работах на проезжей части лучше не игнорировать - это вопрос Вашей же безопасности. ...\views\layouts\main.php - орудуй здесь, если хочешь, чтобы виджет был виден на всех страницах сайта.  
61 Разделы (темы) - немного теории 00:11:07
10 чел. ★ 5 Done
  На этом уроке мы рассмотрим вопрос тематик объявлений на нашем сайте, а также составим план (структуру) таблицы тем Themes и связующей таблицы ThemesBulletins
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 27 мин. [Показать отчёт]
Научился: организуя связи между таблицами выделяют главную или родительскую таблицу (primary key table / master table) и зависимую, дочернюю таблицу Дочерняя таблица зависит от родительской Внешний ключ - это один или несколько столбцов из одной таблицы, являющийся ключом из другой таблицы Поле themes-id таблицы Themesbulletins будет ключеваться с полем id таблицы Themes А поле bulletins-id таблицы Themesbulletins будет связано с полем id таблицы Bulletins 
62 Разделы (темы) - миграции с внешними ключами 00:18:49
10 чел. ★ 5 Done
  На этом уроке мы создадим миграции таблиц themes и themesbulletins, сами эти таблицы и их модели ActiveRecord с внешними связями
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 47 мин. [Показать отчёт]
Научился: http://bull.local/gii/model - автогенератор моделей Результат можно проверить в нетбинсе или иной IDE Аналогично, ни в какую не хотела проявляться в дереве нетбинса ThemesRecord.php Менюшек для рефреша не нашел, так же перезапустил нетбинс - после этого модель подхватилась 
63 Обратная связь - мозговой штурм - внештатные ситуации 00:09:19
9 чел. ★ 5 Done
  В данном уроке попрошу Вас выполнить небольшую самостоятельную работу и дать обратную связь.

Отчёт отправил: 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 Разделы (темы) - вывод тем в объявлении 00:16:29
9 чел. ★ 5 Done
  На этом уроке мы реализуем вывод тем на странице объявления
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 8 мин. [Показать отчёт]
Научился: <h2>Темы</h2> задает средний заголовок с текстом Темы В админке не надо второй раз кликать вперед )) Иначе запись добавляется дважды и кнопок с темой становится по количеству кликов - можно хоть весь экран кнопками замостить. Не сразу понял, отчего сначала кнопка с темой не появлялась, причина была в том, что старому объявлению делал связь, не тому на которое смотрел, а затем найдя нужное кликал по два раза - смотрю - кнопок с темой две. Решение - просто удалить повторную запись в админке 
65 Разделы (темы) - меню тематик 00:10:55
8 чел. ★ 5 Done
  На этом уроке мы реализуем вывод ссылок на темы на главной странице и подсчет объявлений в каждой теме
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 27 мин. [Показать отчёт]
Научился: в роли коровы для темы Детям у меня оказался кошак - он ближе по сущности к животным Функция getThemesBullCount() из модели вызывается успешно и счетчик при добавлении связей в таблицу themesbulletins успешно инкрементируется 
66 Разделы (темы) - тематические выборки 00:15:13
8 чел. ★ 5 Done
  На этом уроке мы реализуем выбор объявлений по темам и вывод их на основную страницу
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 6 час. 38 мин. [Показать отчёт]
Научился: гиперссылка представления должна обращаться к контроллеру в URL после знака вопроса указываются параметры Присвоение = один знак равно Эквивалентность == два знака равно array_push() - функция добавления элемента массива Лидирующий слеш обязан быть в составном URL 
67 Разделы (темы) - полезные переходы 00:11:48
7 чел. ★ 5 Done
  На этом уроке мы реализуем возвращение со страницы объявлений на предыдущую страницу, а также переходы по темам объявления по типу хештегов
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 23 мин. [Показать отчёт]
Научился: в гиперссылку кнопки передается переменная $prev_url Переменная создается в контроллере базовыми функциями Yii::$app->request->referrer; Кнопки тем переделали из кнопок баттон в блок а с добавлением гиперссылки на адрес /site/index?id=<?=$thb->themes->id?> 
68 Разделы (темы) - администрирование - теория и заготовки 00:09:03
7 чел. ★ 5 Done
  На этом уроке мы создадим контроллер для администрирования разделов (тем) и представление index
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 17 мин. [Показать отчёт]
Научился: администрирование сайта предоставляется пользователям по ролям, простой зарегистрированный пользователь не должен иметь доступа ко всему функционалу на сайте Создав во вьюшке новую кнопку не забудь создать для нее свой Контроллер Ошибка Class 'app\controllers\Controller' not found говорит об отсутствии подключения библиотек (use Yii и так далее) - иллюстрация 0  
69 Разделы (темы) - администрирование - все темы в таблицу 00:10:55
7 чел. ★ 5 Done
  На этом уроке мы выведем существующие темы в таблицу и зададим им элементы управления
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 29 мин. [Показать отчёт]
Научился: Валерий Владимирович увеличил шрифт - стало удобнее считывать ввод с экрана Список тем для представления предоставляет ThemesController.php Полученный список в виде переменной (которые у нас без доллара не указываются ни при каких обстоятельствах) передается в рендер следующим аргументом, после индекса в квадратных скобках в виде поле =>имя переменной Указав тейбл-хавер через даблъю - думаю, чего это у меня полет над строками не подсвечивается - посмотрел, исправил на латинскую ви - вуаля, полет нормальный! 
70 Разделы (темы) - администрирование - подтверждение удаления 00:15:58
7 чел. ★ 5 Done
  На этом уроке мы реализуем алгоритм подтверждения удаления и создадим соответствующее представление
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 36 мин. [Показать отчёт]
Научился: ссылки от представления ведут в Контроллер - там этим ссылкам соответствуют одноименные функции с предваряющим словом action в названии Если действие в контроллере выполняется над одной записью, то не забываем в эту функцию передать аргументом переменную с идентификатором Чтобы добраться до предыдущей страницы сайта используй конструкцию \Yii::$app->request->referrer; помещая её в переменную  
71 Разделы (темы) - администрирование - удаление разделов и чистка связей 00:09:07
7 чел. ★ 5 Done
  На этом уроке мы окончательно удалим раздел, а перед этим удалим все его связи с объявлениями
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 24 мин. [Показать отчёт]
Научился: при удалении на сайте темы, не забывай удалять кроме экранных форм ещё и связи с таблицей setDeleteThemesBullRecord() удаляет тему в БД $theme->delete(); удаляет экранные формы сайта 
72 Разделы (темы) - администрирование - Обычный ThemesForm 00:10:23
7 чел. ★ 5 Done
  На этом уроке мы создадим модель 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 Разделы (темы) - исправление подсчета и отображение текущей темы 00:08:28
7 чел. ★ 5 Done
  Hа этом уроке мы исправим ошибку подсчета, обнаруженную в процессе прохождения курса,
а также отобразим текущую тему, по которой выборка объявлений, в баннере


Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 26 мин. [Показать отчёт]
Научился: Степан и Ефим - самые активные курсанты на курсе "Доска объявлений" Степан обнаружил ошибку, Ефим локализовал Суть ошибки - при отключении просмотра объявления (перевод его в статус редактируемого черновика без публикации) в кнопке темы это объявление не минусуется Получается, пользователю сообщают о всех объявлениях, показывая не все из них Подсчет вызывается здесь \models\ThemesRecord.php Победили проблему вызвав функцию счета для другого метода, где темы с опубликованными топиками (getBullCurrTheme()) - иллюстрация номер ноль Попрощались с "Добрый день, tolya34!" в банере в угоду функциональности - вывели на его месте название выбранной темы Банер удалили здесь - \views\layouts\main.php Новый вывод создали флешкой в контроллере сайта (иллюстрация 1) 
74 Разделы (темы) - администрирование - "темное" представление 00:11:49
7 чел. ★ 5 Done
  На этом уроке мы создадим поля для редактирования или добавления темы в представлении themes\add
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 27 мин. [Показать отчёт]
Научился: заголовок в форме добавления и редактирования тем выполнили бутстрапом и хлебными крошками Чтобы использовать переменные в представлении, не забудь передать их из контроллера \controllers\ThemesController.php Передача полей делается в функции function actionAdd контроллера тем (иллюстрация номер ноль) Заметил что CTRL+S сохраняет лишь в открытом окне, нажатие же на дискетку сохраняет изменения во всех окнах нетбинса  
75 Разделы (темы) - администрирование - волшебный выпадающий список 00:09:17
1 тест
7 чел. ★ 5 Done
  На этом уроке мы создадим выпадающий список выбора родительской темы
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 22 мин. [Показать отчёт]
Научился: через переменную $items загрузили в выпадающее меню поля id и title из ThemesRecord ArrayHelper мапит в переменную $items содержимое всех записей из модели ThemesRecord ЗЫ Утром в газете - вечером в куплете. Только сегодня читая "РНР7 в подлиннике" про селекты и опшны, вечером это же вижу в уроке! Теория подкрепляется практикой. Спасибо! 
76 Разделы (темы) - администрирование - сохранение темы 00:19:30
7 чел. ★ 5 Done
  На этом уроке мы реализуем сохранение добавляемых и редактируемых тем
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 51 мин. [Показать отчёт]
Научился: сохранение новой добавленной темы выполняется в ThemesController функции actionAdd В указанной функции после двух проверок(на метод пост и на валидность ввода) выполняются четыре оператора: в переменную инициализируется новый объект ThemesRecord туда же записывается текущий ввод темы сохраняется и редиректится на новый экран Поскольку в модели ThemesRecord ещё не было функции setNewRecord - добавили и её Редактирование темы выполняется там же, в actionAdd  
77 Разделы (темы) - администрирование - рефакторинг и валидация 00:07:02
7 чел. ★ 5 Done
  На этом уроке мы сделаем рефакторинг нашего представления add и валидацию данных формы ThemesForm
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 21 мин. [Показать отчёт]
Научился: перенося операторы в другой файл обращайся к ним через название функции, в которую их там поместил Оператор либо сразу возвращай ритёрном, либо помещай в переменную, которую не забудь в конце функции вернуть Проверка на обязательное заполнение добавлена в модели ThemesForm.php в функции rules()  
78 Связи объявлений и тем - заготовка 00:12:50
7 чел. ★ 5 Done
  На этом уроке мы создадим действие в контроллере 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 Связи объявлений и тем - добавление новой темы 00:22:38
7 чел. ★ 5 Done
  На этом уроке мы научим нашу систему добавлять новую тему в объявление (делать связь темы и объявления)
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 2 мин. [Показать отчёт]
Научился: После создания модели с рулезами и атрибутами не забываем создать экземпляр этой модели в контроллере В контроллере в функции добавления темы создали экземпляр того файла и передали его в рендер для представления пользователю Ошибка Class 'app\models\Bulletins' not found говорит о том, что в модели \models\ThemesbulletinsRecord.php неверно указаны в рулезах целевые классы  
80 Связи объявлений и тем - темы, которых не было 00:11:33
1 тест
7 чел. ★ 5 Done
  На этом уроке мы научим нашу систему выводить в список добавляемых в объявление тем только те, которые не прикреплены к нашему объявлению
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 29 мин. [Показать отчёт]
Научился: удаление из выпадающего меню уже добавленных тем к текущему объявлению выполнили так: В модели в функции получения листа тем в переменную записали все темы, у которых идентификатор приходит из параметров функции Если не нужны все поля, а только одно, то применяется селект Если требуется псевдоним или алиас, поле можно переименовывать через AS так: 'themes_id as id' Выборка по ->where(['in','id',$tb]) применяет три параметра через запятую - "включительно", "по какому полю", "имя переменной-источника" Обратное включительному будет "not in"  
81 Связи объявлений и тем - темы, которых не будет 00:10:57
7 чел. ★ 5 Done
  На этом уроке мы научим нашу систему удалять из объявлений темы, к которым наше объявление привязывать не надо
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 39 мин. [Показать отчёт]
Научился: добавил в представлении addtheme гиперссылку href="/bulletins/deletetheme... - иди в контроллер делать активацию работы этой гиперссылки Контроллер выбери BulletinController и там добавляй одноименное действие (функцию) с предшествующим словом экшн в названии Контроллер таким образом оживляет вьюшку приказывая системе что предпринять при нажатии пользователя на эту гиперссылку В функции контроллера ищем тему по идентификатору, обязательно одну, не массивом, применяем к ней функцию удаления и редиректим на ту же страницу с текущей темой Конкатенация в РНР указывается точкой - не забывай тчк между строкой и переменной  
82 Глобальный поиск - поле поиска в меню 00:17:09
7 чел. ★ 5 Done
  На этом уроке мы добавим поле поиска в навигационное меню сайта, а также решим вопрос с активными пунктами меню.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 9 мин. [Показать отчёт]
Научился: видишь ошибку - чеши в F12 браузера и смотри стили - в имени класса ищи адрес, толкай его в файл стилей (у нас это D:\OSPanel\domains\bulletin\web\css\site.css) и задавай этому классу те свойства, что считаешь правильными Открывая ActiveForm() бегином не забывай и закрывать оную эндом Параметры открытия указывай в круглых скобках не забыв ещё и квадратные  
83 Глобальный поиск - ищем глобально 00:17:08
7 чел. ★ 5 Done
  На этом уроке мы создадим алгоритм поиска по вводимому в поле search контенту
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 30 мин. [Показать отчёт]
Научился: при наличии в Представлении ссылки на отсутствующий Контроллер, переход по такой ссылке вернёт привычный код 404 'AND' это логическое умножение(булевское) принимает ИСТИНА если верно и первое значение операнда и второе одновременно 'OR' - булево сложение, тут для ИСТИНЫ достаточно хотя бы одного из операндов  
84 Расширенный поиск - группировка пунктов главного меню 00:12:47
7 чел. ★ 5 Done
  На этом уроке мы сгруппируем пункты главного меню в подразделы,
и сделаем в нем ссылку на страницу расширенного поиска
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 38 мин. [Показать отчёт]
Научился: менюхи на главной странице выполнены в виде виджета навбар через ассоциированные массивы ярлык(лейбл) => Название менюхи на пятой минуте видео очень жаль, что подсказки по поиску лишней скобки не принимаются ))) Но процесс творческий сложнее ученического, просто смотрим и учимся, как же на самом деле ищут ошибки, как идут не всегда верным путем, и тот кто не сдается ошибку находит На восьмой минуте лишняя скобка обнаружена и аннигилирована! Проблема крылась в копировании готового оператора- захватили лишний знак при копипасте Внимательность - наше всё.  
85 Расширенный поиск - заготовки и план 00:10:03
7 чел. ★ 5 Done
  На этом уроке мы набросаем план будущей страницы расширенного поиска,
а также создадим действие контроллера и заготовку представления расширенного поиска
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 34 мин. [Показать отчёт]
Научился: план создал прямо в файле РНР потренировавшись в разметке HTML Не так и сложно тегами разбивать на строки, куда сложнее разбираться в переплетениях РНР кода и разметки, вот тогда внимательность не помешает, чтобы не прозевать открытые и закрытые конструкции в правильной структуре 
86 Расширенный поиск - стили и форма 00:10:11
7 чел. ★ 5 Done
  На этом уроке мы внесем исправления в стили субменю и сделаем модель формы расширенного поиска
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 43 мин. [Показать отчёт]
Научился: Валерий дал хинт: если есть косяк со стилями (цвет не тот, размер иль шрифт) беги снова по F12 курсором в виде стрелки (вверху есть в стилях) к тому объекту, который требует вмешательства, смотри его идентификатор(по классу, id) копируй или записывай и бегом в файл стилей \bulletin\web\css\site.css и там прописывай желаемый стиль для этого объекта хоть отдельным, хоть через запятую добавь к уже имеющимся Создали форму для расширенного поиска, там проинициализировали переменные и функцию описывающую типы полей и их месаджи 
87 Расширенный поиск - дизайн текстовых полей и кнопки 00:16:02
7 чел. ★ 5 Done
  На этом уроке мы прокачаем навыки дизайна текстовых полей, создания активной формы в представлении,
а также создания кнопки через хелперы yii2
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 41 мин. [Показать отчёт]
Научился: при клике на меню Расширенный поиск работает функция actionAdvsearch() сайтКонтроллера где создается в переменную $advSearch новая форма отсюда D:\OSPanel\domains\bulletin\models\AdvsearchForm.php Затем в рендер через запятую добавили эту переменную в виде ассоциированного массива ключом adv и значением в виде нашей новой переменной, получающей форму ($advSearch) Кнопку создали хелперами Html::submitButton После этого посмотрел код объекта кнопка (иллюстрация номер 0) хелперы создают тот же батон типа сабмит только своими средствами. а в итоге приводят туда же  
88 Расширенный поиск - цена - выбор варианта 00:10:45
7 чел. ★ 5 Done
  На этом уроке мы создадим систему управления выбором варианта поиска по цене
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 21 мин. [Показать отчёт]
Научился: переключение подсветки текущей кнопки (аналог действия радиобатон) выполнили через джаваскрипт Класс прайсселект по кликувыполняет два оператора: первый удаляет класс Эктив у всех носителей класса прайсселект второй присваивает текущему прайсселекту класс Эктив Всё просто до безобразия ) Знание - сила!  
89 Расширенный поиск - цена - невидимые поля 00:18:17
7 чел. ★ 5 Done
  На этом уроке мы создадим невидимые блоки с полями поиска цены, которые становятся видимыми при нажатии определенного пункта навигатора
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 42 мин. [Показать отчёт]
Научился: добавив поля в инициализацию переменных не забудь дописать их и в рулез Великая сила скрыта в стилях и классах - задал по имени класса display:none;  и после обновления страницы элементы этого класса есть, но их не видно, как сусликов .ready функция отрабатывает по загрузке страницы .on('click' функция выполняется по клику ЛКМ 
90 Расширенный поиск - дата публикации - виджет извне 00:23:18
7 чел. ★ 5 Done
  На этом уроке мы установим в наш проект компонент jui от стороннего разработчика
и создадим календарики для выбора дат


Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 49 мин. [Показать отчёт]
Научился: впервые понюхал композер ) Сие есть установщик пакетов для РНР и фреймворков Плясать надо от файла в нетбинсе D:\OSPanel\domains\bulletin\composer.json В раздел "require" через запятую добавляем ссылку на наш новый виджет Следующим шагом - в консоль проекта и вводим команду  composer update - будет закачка обновлений и установка нового, если указал  
91 Расширенный поиск - результаты выборки - частичное представление 00:17:21
7 чел. ★ 5 Done
  На этом уроке мы рассмотрим возможность использования частичного представления в yii2-проекте и выведем в частичное представление карточку объявления
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 47 мин. [Показать отчёт]
Научился: <?=$this->render('выведет любую вьюшку имеющуюся в проекте по имени Запись <?php for ($x=1; $x<4; $x++) { ?>     <?=$this->render('test',['x'=>$x]) ?> <? } ?> вернет циклом три строки с содержимым вьюшки с именем тест и конкатенирует к её содержимому переменную х три раза по возрастанию  
92 Расширенный поиск - генератор поиска - возвращение к SQL-запросу 00:15:52
7 чел. ★ 5 Done
  На этом уроке мы создадим генератор отчета, используя работу ActiveRecord фреймворка yii2 c
sql-запросами, и включим в него поиск по текстовым полям формы расширенного поиска
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 34 мин. [Показать отчёт]
Научился: findBySql() позволяет возвращать выборку по правилам SQL .= или точка и равно - это оператор конкатенации добавляющий к переменной то, что справа от знака равно Создание запроса выполнено конкатенацией условий поиска в сиквел-запрос в случае если поле окажется не пустым 
93 Расширенный поиск - генератор поиска - ограничивающие даты 00:10:54
7 чел. ★ 5 Done
  На этом уроке мы добавим в генератор отчета расширенного поиска выборку по датам публикации

Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 37 мин. [Показать отчёт]
Научился: карточка объявления создается здесь - \views\site\bulletin.php Конкатенация в РНР не плюс равно, а точка - не забывай особенности персонал хоум пейджа Хочешь посмотреть, что возвращает сиквел-запрос, подправь имя переменной, чтобы вернулась ошибка - там и найдешь текст запроса для контроля его правильности создания 
94 Расширенный поиск - генератор поиска - три вида цены и один POST 00:14:47
7 чел. ★ 5 Done
  На этом уроке мы реализуем различные варианты выборки объявлений по цене и добавим их в наш генератор расширенного поиска

Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 34 мин. [Показать отчёт]
Научился: Если нужна новая переменная, инициализируй (объявляй её), записывай в рулез, и лишь затем используй Радиокнопки прописаны здесь - \views\site\advsearch.php В ветвлении свич-кейс не забываем ставить брейки, иначе помимо нужного, будет выполнено и дальее по строкам ниже  
95 Обратная связь - свой сайт объявлений без видео
7 чел. ★ 5 Done
  И снова обратная связь.Подумаем самостоятельно и ответим на вопросы:

Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 55 мин. [Показать отчёт]
Научился: 1. Как Вы назовете свой сайт объявлений? Название пока напрашивается для сайта "Чижик" в память о бывшей барахолке в Чижах (район города Кирова) во времена СССР. Сейчас никаких барахолок там давно уже нет, естественно ибо времена и нравы изменились. Если центральный рынок и сохранился, то такие как барахолка в Чижах, она лишь в памяти народной. 2. Какое доменное имя в сети у него будет? На первое время для работы в режиме тестирования и дальнейшего углубления в тему доменное имя будет как можно более кратким. В бытность мою сисадмином в одном банке с названием из тринадцати букв у меня был почтовый адрес, который мне крайне нравился своей краткостью. За давностью лет, думаю никакой тайны не открою и прежних инструкций не нарушу, если назову его без домена первого уровня. Адрес был такой da@wscb. и так далее. Прелесть короткого доменного имени в простоте запоминания. Просто в телефонном разговоре передать собеседнику имя из двух литер вместо нагромождения из "как доллар", низкое подчеркивание, йот как кочерга и прочих сложностей. Чем проще имя, тем легче запоминание. Вэка точка ком или fb.com лучшие тому подтверждения. В идеале я возьму доменное имя da.ru Но, понятно, что это дорого и пока нереально )  Посмотрел этот самый http://da.ru/ на предмет занятости - там уже продаваны доменных имен сидят ))) 3. Почему Вы так назвали свой сайт Название должно быть простым и запоминающимся. У имени есть предыстория, есть от чего оттолкнуться. Плюс для зацепки вспоминается песенка про чижика-пыжика, которому даже памятники есть в Ленинграде ) 
96 Расширенный поиск - генератор поиска - показать, что нужно 00:20:55
7 чел. ★ 5 Done
  На этом уроке мы реализуем отображение той вкладки поиска по ценам,
по которой производился  поиск
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 47 мин. [Показать отчёт]
Научился: для актуализации состояния радиокнопки после возвращения результата расширенного поиска применили дополнительную переменную, которая принимает текущее состояние оператором в свичкейсе, это состояние и присваивается радиокнопке в представлении для пользователя, дабы не вводить его в заблужение В представлении \views\site\advsearch.php применили тернарный оператор для выбора состояния радиокнопки Запись ($adv->radio_=="1" ? true : false) читаем как "если поле радио в переменной адэвэ эквивалентно единице то ИСТИНА (кнопка активна) По аналогии добавили правила установки активной кнопки в контроллере \controllers\SiteController.php которые затем визуализировали пользователю в представлении \views\site\advsearch.php  
97 Работа с документацией Yii2 00:04:42
7 чел. ★ 5 Done
  На этом уроке переходим на один из официальных сайтов по Yii2
и, пользуясь помощью документации, реализовываем одну из своих идей


Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 2 час. 54 мин. [Показать отчёт]
Научился: добавил хеширование пароля пользователя bcrypt через функцию crypt для генерации и проверки пароля Пишут, что алгоритмы md5 или sha1 уже недостаточно защищённые, что требует дополнительных мер безопасности Дополнительно подправил отображение карточки объявления (там где картинка накладывается на текст справа) - надо освежить в памяти бутстрап, жестко привязывать размер изображения в угоду лишь своему монитору - это половинчатое недорешение 
98 Пользователи и роли - планирование ролевой модели 00:08:08
7 чел. ★ 5 Done
  На этом уроке мы составим ролевую модель пользователей нашего сайта
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 20 мин. [Показать отчёт]
Научился: как вариант, можно предусмотреть роль забаненного пользователя Продолжить рассмотрение темы можно с учетом активности как подтвержденных продавцов, так и учеток, замеченных в мошеннических операциях 
99 Пользователи и роли - фильтры контроля доступа ACF - теория и эксперименты 00:08:44
7 чел. ★ 5 Done
  На этом уроке мы рассмотрим принципы работы фильтров контроля доступа ACF
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 19 мин. [Показать отчёт]
Научился: роли, помеченные @ - это зарегистрированные пользователи, помеченные знаком вопроса ? относятся ко всем юзерам поголовно behaviours - как я помню на заморском языке не что иное как поведения, задают эти поведения правила работы сайта с пользователем Добавив через запятую в 28-ой и 31-ой строках иллюстрации номер ноль строковую ссылку на расширенный поиск мы получаем переадресацию незарегистрированного пользователя на форму залогинивания после нажатия выпадающего меню "Расширенный поиск" 
100 Пользователи и роли - фильтры контроля доступа ACF - фильтруем всё 00:10:27
7 чел. ★ 5 Done
  На этом уроке мы сами создадим метод behaviors() в BulletinsController и зададим нужные фильтры для действий контроллера
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 4 час. 49 мин. [Показать отчёт]
Научился: функция behaviours через указание имен функций этого же класса позволяет перекрывать или предоставлять доступ по ролям Собака - зарегистрированные пользователи, знак вопроса - все прохожие По аналогии продолжил перекрывать доступ в контроллерах, начиная с фотоконтроллера 
101 Пользователи и роли - роли через RBAC - теория, установка и миграции 00:11:16
7 чел. ★ 5 Done
  На этом уроке мы установим расширение RBAC, настроим подключение к RBAC и создадим
базы для авторизации при помощи механизма миграции

Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 3 час. 19 мин. [Показать отчёт]
Научился: Миграция прошла успешно на втором ноуте, тютелька в тютельку Композитор не кривлялся, скачал нужные библиотеки и установка прошла на ура. Таблицы созданы. 
Сложности: В былые годы Игромистр рекомендовал сбыть на просторы старые ноуты и купить один на все вырученные сольдо. А тут старый ноут оказался  целесообразнее новых двух. Вот и думай ) Отчего на соньке вайо не грузится компоузером сомпонента RBAC остается пока неясным. Вернусь домой попробую снова и опубликую скрин с ошибкой. Любопытно же понять, что не так.  
102 Пользователи и роли - роли через RBAC - тесты и практика 00:25:53
7 чел. ★ 5 Done
  На этом уроке мы создадим тестовые роли и разрешения, а также проверим работу контроллера
согласно разрешений
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 22 мин. [Показать отчёт]
Научился: создали новое представление - в контроллере новую функцию плюс файл РНР в представлениях и по ссылке можно уже открывать вьюшку В \controllers\SiteController.php создали экземпляр объекта authManager В этом экземпляре присвоили права, создали пару тестовых ролей и привязали их к двум пользователям (учетным записям из БД)  
Сложности: Понять, что для выполнения скрипта надо не просто обновлять страницу проекта, а именно http://bull.local/site/authinit обновлять и запускать скрипт тем самым )) Не сразу дошло 
103 Пользователи и роли - роли через RBAC - вносим действия в план 00:09:04
7 чел. ★ 5 Done
  На этом уроке мы добавим действия к ролям в нашей актуальной ролевой модели
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 24 мин. [Показать отчёт]
Научился: от простого к сложному Любой пользователь без регистрации может знакомиться с контентом сайта Зарегистрировавшись можно создавать, публиковать, редактировать и снимать с публикации ТОЛЬКО СВОИ объявления про мопед Модератору добавлены права на редактирование и публикацию всех объявлений Админ может дополнительно удалять объявления и рулить темами Суперюзеру добавлен доступ напрямую в БД  
104 Пользователи и роли - роли через RBAC - реализация плана 00:30:34
6 чел. ★ 5 Done
  На этом уроке мы создадим актуальные роли и действия для пользователей нашего сайта
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 день 36 мин. [Показать отчёт]
Научился: таблицы создаются при запуске файла в браузере успешно. Аргументы передаются по очереди, первый кому присваивается роль, второй аргумент - какая роль присваивается. Роль может присваиваться именем другой роли, в этом случае все права указанной роли наследуются целиком. 
Сложности: При сохранении проекта на гитхабе отчего-то не сохраняется папка vendor Вчера проект просто не стартовал, не понял почему, сегодня сверил содержимое проекта с архивным и нашел, что снова отсутствует в проекте папка vendor, подложил её и всё взлетело с первого раза. Взял вопрос на контроль, то ли по моему упущению она не загружена была на гитхаб, то ли есть иные причины, мне неизвестные пока Победить и эту багу было приятно. Валерию творческих успехов, всем бобра и качественных мопедов ))) 
105 Пользователи и роли - ACF+RBAC - ограничим доступ к темам 00:16:01
4 чел. ★ 5 Open
  На этом уроке мы реализуем ролевую модель для контроллера тем
106 Пользователи и роли - управление ролями и привилегиями - контроллер и таблица ролей 00:16:57
3 чел. ★ 5 ^
  на этом уроке мы создадим контроллер и представление для управления ролями
107 Пользователи и роли - управление ролями и привилегиями - форма добавления роли 00:13:53
3 чел. ★ 5 ^
  На этом уроке мы создадим действие добавления роли и форму добавления роли

108 Пользователи и роли - управление ролями и привилегиями - сохранение и удаление роли 00:14:17
3 чел. ★ 5 ^
  На этом уроке мы реализуем сохранение роли, а также напишем алгоритм удаления роли
  Итого:   108 видеоуроков 23 час. 33 мин.
25 тестов
3 чел. ★ 4.99  
  Финалисты:   Жан,   Николай Денисов,   Tom .

Начинаем практику по языку C#





Если вы пришли без приглашения -
введите тысяча двадцать четыре (цифрами).
Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.


Научился: Записал видеообзор курса "Доска объявлений" как получилось судить вам, но не судите строго))
Трудности: скришот требует, а где я его возьму? я видео снимал, зачем тогда скрин? ну ладно выложу первый кадр



Научился: На этом курсе: 1 Я создал сайт 2 Сделал домен 3 Реализовал регистрацию пользователей 4 Добавлять объявления - которые могут добавлять только зарегистрированные пользователи один ко многим 5 Загружать фотографии - фотографии к объявлениям сохраняются на сайте в папке image Нравиться что Видеокурсы не больше чем 20мин, всё доступно и понятно рассказано и показано. Хочу научится делать правильные сайты модели MVC
Трудности: Получилось добавить звук к видео средствами youtube.com Надеюсь вы оцените мои труды. Что касается микрофона я купил микрофон и даже конденсаторный переходник, но это мне не помогло. Нужно покупать что то дорогое, а денег как известно нету.