Приложение

Приложение (сайт) для фреймворка строится по схеме 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 и начать работать с шаблонами, можно узнать в разделе "Шаблонизаторы"