Skip to content

Commit bc4c69b

Browse files
committed
update step-0.4
1 parent fd1c8a1 commit bc4c69b

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

scripts/steps/step-000.4.md

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,66 @@
99
git checkout -f step-0.4
1010
```
1111

12+
Входной файл административного раздела (далее Backend) доступен по ссылке
13+
<a href="/yii2-app-advanced/backend/web/index.php?r=site/logout" target="_blank">
14+
/yii2-app-advanced/backend/web/index.php</a>, а все файлы для работы backend располагаются в директории
15+
`/yii2-app-advanced/backend/`.
16+
17+
Если вы не прошли аутентификацию на сайте, то в backend вас не пустит. В работу вступил так называемый фильтр
18+
контроллера <a href="http://www.yiiframework.com/doc-2.0/yii-filters-accesscontrol.html" target="_blank">
19+
yii\filters\AccessControl</a>. Фильтры являются особым видом поведений, которые могут быть выполнены до действия
20+
контроллера или после.
21+
22+
Если открыть `SiteController` backend части, то можно обнаружить следующий код:
23+
24+
```php
25+
return [
26+
'access' => [
27+
'class' => AccessControl::className(),
28+
'rules' => [
29+
[
30+
'actions' => ['login', 'error'],
31+
'allow' => true,
32+
],
33+
[
34+
'actions' => ['logout', 'index'],
35+
'allow' => true,
36+
'roles' => ['@'],
37+
],
38+
],
39+
],
40+
];
41+
```
42+
43+
С помощью правил доступа `rules` можно описать к каким действиям контроллера применять те или иные ограничения.
44+
45+
<p class="alert alert-info">Подробная информация по работе фильтров описана в
46+
<a href="https://github.com/yiisoft/yii2/blob/master/docs/guide-ru/structure-filters.md" target="_blank">официальном
47+
руководстве</a>
48+
</p>
49+
50+
Теперь давайте вернёмся к форме "Опрос". Для работы с формой в клиентской части(далее frontend) мы использовали
51+
Active Record модель `Interview`, которая описывала форму. Т.к. эта модель описана в frontend, то в backend
52+
она не доступна. Чтобы исправить это, необходимо модель расположить в общей директории - `common/models/`.
53+
Необходимо скопировать файл `Interview.php` из `frontend/models` в `common/models/`. Это уже сделано.
54+
55+
Вам осталось изменить файлы следующим образом. В common модели изменим пространство имени, удалим свойство "проверочный
56+
код", удалим правила, так как это всё требуется на стороне frontend части. А в frontend модели изменить
57+
родительский класс с `\yii\db\ActiveRecord` на `\common\models\Interview` и удалите методы `tableName()` и `attributeLabels()`.
58+
59+
Теперь, когда все изменения внесены, в backend возможно использовать модель `\common\models\Interview`. Создадим вид,
60+
в котором будут отображаться все записи из таблицы "Опросов". Чтобы облегчить выполнение этой задачи,
61+
<a href="http://localhost:9000/yii2-app-advanced/backend/web/index.php?r=gii" target="_blank">обратимся к Gii</a>.
62+
Выберите генератор "CRUD Generator", который генерирует виды и контроллер на основании модели. Введите в Model Class
63+
`common\models\Interview`, а в Controller Class - `backend\controllers\InterviewController`. Всё, жмите Preview.
64+
"CRUD Generator" генерируется вид для создания, изменения, удаления и просмотра модели, также помогает генерировать
65+
страницу `index.php`, которая показывает список моделей постранично, используя виджет
66+
<a href="http://www.yiiframework.com/doc-2.0/yii-grid-gridview.html" target="_blank">GridView</a> или
67+
<a href="http://www.yiiframework.com/doc-2.0/yii-widgets-listview.html" target="_blank">ListView</a>
68+
Нажимаем "Generate" и наслаждаемся <a href="/yii2-app-advanced/backend/web/index.php?r=interview" target="_blank">
69+
результатами работы</a>
70+
71+
72+
73+
TODO: описать виджет GridView, ограничить доступ
74+

0 commit comments

Comments
 (0)