BMC IO DocsBMC IO Docs
IO v6
IO v7
Notes
Docs
IO v6
IO v7
Notes
Docs
  • IO Framework v6

    • О фреймворке
    • Уроки
    • Структура
    • Доступ к участкам проекта
    • Старые версии фреймворка
    • Разворачивание нового проекта
  • Backend

    • Функции фреймворка
    • Настройки проекта (app/i.php)
    • Настройки composer
    • Глобальные переменные
    • Константы фреймворка
    • Event класс
    • IOCore класс
    • Controller и работа с ними
    • Class и работа с ними
    • Model и работа с ними
    • View и работа с ними
    • Мультиязычность и словарь фраз
    • Bin скрипты и работа с ними
    • Cron скрипты и работа с ними
    • $ioSession и работа с сессией
    • $ioSession->user и работа с пользователем
    • $ioHash и работа с кешем
    • $ioXCache и работа с кешем
    • $iodb и работа с базой данных
  • Frontend

    • Twig шаблонизатор и работа с ним
    • Twig функции
    • Twig фильтры
    • JS плагины
    • Отложенная загрузка JS скриптов
    • Обращение к Model через JS
  • Примеры

    • AutoIncrement, зависящий от полей

IO v6. Controller и работа с ними

  • Описание
  • Содержимое файла
  • Функции, обязательные для объявления
    • layout()
    • actionIndex()
  • Функции, необязательные для объявления
    • run_pre()
    • run_post()
  • Примеры обработки ссылок
    • site.kz/test
    • site.kz/hello/world
  • Доступные функции
    • setLayout()
    • render()
    • IOCore::renderPlain()
    • renderAction()
    • redirect()

Описание

Controller - это обработчик URL ссылок. Здесь также используются вызовы class, model и view. Controller вызывается в браузере в строке URL.

Различные вариации URL называют маршрутами. В данной версии фреймворка регистрация маршрутов вручную невозможна, так как фреймворк делает их генерацию и регистрацию автоматически, в зависимости от названия контроллеров, их расположения в проекте и названия их функций.

Содержимое файла

<?php

class ExampleController extends IOController
{
    public static function layout()
    {
        return 'io.view.blank';
    }

    public static function actionIndex($method, $end)
    {
        self::render('app.view.example');
    }
}

Controller выше обрабатывает ссылку "site.kz/example".

Файлы controller'ов проекта находятся в папке project/app/controller. Имя файла должно начинаться с маленькой буквы (далее СamelCase) и иметь постфикс Controller.php (пример: exampleController.php). Имя класса должно быть таким же, как и название файла, но с большой буквы и без формата файла .php (пример: ExampleController).

Функции, обязательные для объявления

layout()

Данная функция возвращает string значение, которое содержит в себе layout view-шаблон по умолчанию. Если особого layout нет, можно использовать "пустой" layout 'io.view.blank'. Layout - это некий каркас-обертка для view. К примеру, теги <html> и <body> это layout, а то, что находится внутри тега <body> это view.

public static function layout()
{
    return 'io.view.blank';
}

actionIndex()

Стандартная функция, обрабатывающая обращение к самому controller по умолчанию. Дополнительные обработчики ссылок пишутся по подобию данной функции, начиная с префикса action и далее через CamelCase.

public static function actionIndex($method, $end)
{
    // ...
}

Функции, необязательные для объявления

run_pre()

Функция, выполняющаяся перед выполнением любой action функции.

public static function run_pre($method, $end)
{
    // ...
}

run_post()

Функция, выполняющаяся после выполнения любой action функции.

public static function run_post($method, $end)
{
    // ...
}

Примеры обработки ссылок

site.kz/test

Способы обработки ссылки site.kz/test:

  • создать функцию actionTest(…){…} в controller'е mainController.php
project/app/controller/mainController.php
class MainController extends IOController
{
    // ...

    public static function actionTest($method, $end)
    {
        echo 'hello from test page';
    }

    // ...
}
  • извлечь часть URL строки функцией parseUrl() и написать условие в функции actionIndex(…){…} в controller'е mainController.php
project/app/controller/mainController.php
class MainController extends IOController
{
    // ...

    public static function actionIndex($method, $end)
    {
        parseUrl($end, $pagename, $end);

        if($pagename == 'test')
        {
            echo 'hello from test page';
        }
    }

    // ...
}
  • создать функцию actionIndex(…){…} в controller'е testController.php
project/app/controller/testController.php
class TestController extends IOController
{
    // ...

    public static function actionIndex($method, $end)
    {
        echo 'hello from test page';
    }

    // ...
}

site.kz/hello/world

Способы обработки ссылки site.kz/hello/world:

  • создать функцию actionHelloWorld(…){…} в controller'е mainController.php
project/app/controller/mainController.php
class MainController extends IOController
{
    // ...

    public static function actionHelloWorld($method, $end)
    {
        echo 'hello from hello world page';
    }

    // ...
}
  • извлечь часть URL строки функцией parseUrl() и написать условие в функции actionHello(…){…} в controller'е mainController.php
project/app/controller/mainController.php
class MainController extends IOController
{
    // ...

    public static function actionHello($method, $end)
    {
        parseUrl($end, $pagename, $end);

        if($pagename == 'world')
        {
            echo 'hello from hello world page';
        }
    }

    // ...
}
  • извлечь часть URL строки функцией parseUrl() и написать условие в функции actionIndex(…){…} в controller'е mainController.php
project/app/controller/mainController.php
class MainController extends IOController
{
    // ...

    public static function actionIndex($method, $end)
    {
        parseUrl($end, $pagename, $end);
        parseUrl($end, $subpagename, $end);

        if($pagename == 'hello')
        {
            if($subpagename == 'world')
            {
                echo 'hello from hello world page';
            }
        }
    }

    // ...
}
  • создать функцию actionWorld(…){…} в controller'е helloController.php
project/app/controller/helloController.php
class HelloController extends IOController
{
    // ...

    public static function actionWorld($method, $end)
    {
        echo 'hello from hello world page';
    }

    // ...
}
  • извлечь часть URL строки функцией parseUrl() и написать условие в функции actionIndex(…){…} в controller'е helloController.php
project/app/controller/helloController.php
class HelloController extends IOController
{
    // ...

    public static function actionIndex($method, $end)
    {
        parseUrl($end, $pagename, $end);

        if($pagename == 'world')
        {
            echo 'hello from test page';
        }
    }

    // ...
}
  • создать функцию actionIndex(…){…} в controller'е helloWorldController.php
project/app/controller/helloWorldController.php
class HelloWorldController extends IOController
{
    // ...

    public static function actionIndex($method, $end)
    {
        echo 'hello from hello world page';
    }

    // ...
}
  • создать функцию actionIndex(…){…} в controller'е hello/worldController.php
project/app/controller/hello/worldController.php
class WorldController extends IOController
{
    // ...

    public static function actionIndex($method, $end)
    {
        echo 'hello from hello world page';
    }

    // ...
}

Доступные функции

setLayout()

self::setLayout(string $view);

Функция устанавливает layout для конкретной action функции.

Пример:

public static function actionIndex($method, $end)
{
    self::setLayout('app.view.layout');
    self::render('app.view.example');
}

render()

self::render(string $view, array $params = []);
// или
IOCore::render(string $view, array $params = []);

Функция отрисовывает указанный view, передавая в него параметры из $params.

Пример:

public static function actionIndex($method, $end)
{
    $name = xget('name');
    $age = 25;
    self::render(
        'app.view.example',
        [
            'name' => $name,
            'age' => $age;
        ]
    );
}

IOCore::renderPlain()

IOCore::renderPlain(string $view, array $params = []);

Функция отрисовывает указанный view игнорируя layout и передавая в него параметры из $params. В данном случае view файл уже должен иметь некую структуру, которую имеют layout файлы.

Пример:

public static function actionIndex($method, $end)
{
    IOCore::renderPlain(
        'app.view.example',
        [
            'name' => $name,
            'age' => $age;
        ]
    );
}

renderAction()

self::renderAction(string $action, array $params = []);

Функция отрисовывает результат выполнения функции указанной model.

Пример:

public static function actionIndex($method, $end)
{
    $name = 'test';
    
    self::renderAction(
        'app.model.example.pdf',
        [
            'name' => $name,
        ]
    );
}

redirect()

self::redirect(string $url);

Функция перенаправляет посетителя по указанному пути $url.

Пример:

public static function actionIndex($method, $end)
{
    self::redirect('/hello/world?a=b');
}
Prev
IOCore класс
Next
Class и работа с ними