Приложение
Приложение (сайт) для фреймворка строится по схеме MVC. Это значит, что управлять скриптами по формированию страницы должен контроллер, управлять шаблонами слой view, а данные должны формироваться в моделях. Начнем с контроллера.
По умолчанию это
App\Controllers\MainController.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
namespace App\Controllers;
/**
* Контроллер
*
*/
class MainController extends \ABC\Core\Base
{
public function actionIndex()
{
echo 'Привет, Мир!';
}
}
При желании, дефолтный контроллер можно изменить на любой другой, прописав
правило маршрутизации.
Еще раз обратите внимание на немспейсы. Они обычно формируются из
глобального префикса (
ABC\) и пути до директории, в которой расположен класс.
Только с обратными слэшами.
Немспейс нужно прописывать не только общий, но и для каждого класса. А
чтобы руки не уставали писать такие веревки, можно пользоваться
конструкцией
use.
App\Controllers\MainController.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
namespace App\Controllers;
use ABC\Core\Base;
/**
* Контроллер
*
*/
class MainController extends Base
{
public function actionIndex()
{
echo 'Привет, Мир!';
}
}
Она позволяет прописать полное имя класса один раз, а потом
пользоваться коротким именем. Это еще полезно тем, что выполняет роль
некоей документации. Сразу видно, какие классы задействованы.
Главное правило.
Контроллеры и вьюшки одной страницы должны называться одинаково, только с разными постфиксами.
Тогда они образуют как бы общее поле, и появляется возможность гибкого кодирования.
Еще одно важное, но не обязательное правило:
Все контроллеры и вьюшки желательно наследовать от базового класса фреймворка.
Хотя они будут работать и самостоятельно, но не увидят много полезных функций фреймворка.
Если сейчас запустить приложение, то появится строчка-талисман. Однако
делать вывод данных в поток в контроллере - это плохая практика. За
представление должны отвечать вьюшки.
По умолчанию классы представления должны находиться в папке App/Views/. Класс вида должен быть одноименным с контроллером, но с другим постфиксом (View):
App\Views\MainView.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
namespace App\Views;
use ABC\Core\Base;
/**
* Класс MainView
*
*/
class MainView extends Base
{
public function createHello($content)
{
echo $content;
}
}
Теперь самое интересное. Дело в том, что в контроллере есть доступ
к одноименному классу представления. И запустить метод вьюшки можно вот
так:
App\Controllers\MainController.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
namespace App\Controllers;
use ABC\Core\Base;
/**
* Контроллер
*
*/
class MainController extends Base
{
public function actionIndex()
{
$this->view->createHello('Привет, Мир!');
}
}
Однако данные нужно получать не из контроллера, а из модели. Её не нужно наследовать от базового класса, ей из него ничего не пригодится.
App\Models\MainModel.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
namespace App\Models;
/**
* Класс MainModel
*
*/
class MainModel
{
public function getContent()
{
return ['hello' => 'Привет, Мир!'];
}
}
Теперь в контроллере остается только управление:
App\Controllers\MainController.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
namespace App\Controllers;
use ABC\Core\Base;
/**
* Контроллер
*
*/
class MainController extends Base
{
public function actionIndex()
{
$this->view->createHello();
}
}
А в представлении только вывод. К моделям можно обращаться через базовый метод
getModel(). Другие скрипты можно регистрировать в
контейнере или просто подключать автолоадером.
App\Views\MainView.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
namespace App\Views;
use ABC\Core\Base;
/**
* Класс MainView
*
*/
class MainView extends Base
{
public function createHello()
{
$content = $this->getModel('MainModel')->getContent();
echo $content['hello'];
}
}
Вот и весь принцип MVC на базе нашего фреймворка. Как убрать из вьюшки
echo и начать работать с шаблонами, можно узнать в разделе
"Шаблонизаторы"