Знакомство

В данном разделе документации мы пройдем базовые этапы разработки приложения на Ruxon Framework.

Установка Ruxon Framework

Предпочтительным способом установки является установка при помощи Composer.

Для установки подготовлены два приложения - базовое и приложения блога.

Для того, чтобы установить базовое приложение, находясь в document root домена, нужно выполнить в консоли следующую команду:


php composer.phar create-project --prefer-dist --stability=dev ruxon/app .

На этом установка завершена.

Более подробно про установку можно почитать в соответствующем разделе документации.

Запуск приложения

После установки наберите в браузере адрес домена, для которого была произведена установка.

Если установка прошла корректно, то вы увидите следующую страницу:

Основы Ruxon Framework

Ruxon Framework использует шаблон проектирования Модель-Представление-Контроллер (MVC, Model-View-Controller), который широко применяется в веб-программировании. Основная цель применения этой концепции состоит в разделении бизнес-логики (модели) от её визуализации (представления, вида). За счет такого разделения повышается возможность повторного использования.

Роутинг

Модуль, контроллер и действие, необходимое для выполнения определяется на основе адреса URL.

Маршруты (routes) задаются для приложений в конфигурационном файле core.inc.php в секции Routes.

По умолчанию эта секция имеет следующий вид:


return array(
    'Routes' => array(
        // module/controller/action/id
        'Full' => array(
            'Pattern' => '([A-Za-z0-9_]+)/([A-Za-z0-9_]+)/([A-Za-z0-9_]+)/([0-9]+)',
            'Params' => array(
                'Module' => '$1',
                'Controller' => '$2',
                'Action' => '$3',
                'Id' => '$4'
            )
        ),
        // module/controller/action
        'Action' => array(
            'Pattern' => '([A-Za-z0-9_]+)/([A-Za-z0-9_]+)/([A-Za-z0-9_]+)',
            'Params' => array(
                'Module' => '$1',
                'Controller' => '$2',
                'Action' => '$3'
            )
        ),
        // module/controller
        'Controller' => array(
            'Pattern' => '([A-Za-z0-9_]+)/([A-Za-z0-9_]+)',
            'Params' => array(
                'Module' => '$1',
                'Controller' => '$2',
                'Action' => 'Index'
            )
        ),
        // module
        'Controller' => array(
            'Pattern' => '([A-Za-z0-9_]+)',
            'Params' => array(
                'Module' => '$1',
                'Controller' => 'Index',
                'Action' => 'Index'
            )
        )
    ),
);

Таким образом покрывается большинство правил, основанных на module/controller/action паттерне.

При необходимости вы можете добавлять свои маршруты.

Модули

Модуль (module) - мини приложения, выполняющее определенную функциональность.

Контроллеры

Контроллер (controller) - Обеспечивает связь между пользователем и системой: контролирует ввод данных пользователем и использует модель и представление для реализации необходимой реакции.

namespace ruxonmodulesAppcontrollers;

/**
 * Class IndexController
 * @package ruxonmodulesAppcontrollers
 */
class IndexController extends FrontendController
{
    public function actionIndex($params = array())
    {	
		// Отображение представления Index
		return $this->view('Index', [
			'Param1' => 'Value',
			'Param2' => 'Value2'
		]);
    }
}

ORM (модели и мапперы)

ORM построена на базе The Data Mapper Pattern. Каждый класс ORM отражает таблицу (или представление) базы данных, экземпляр ORM — строку в этой таблице, а общие операции CRUD реализованы как методы ORM. В результате мы можем использовать более объектно-ориентированный подход доступа к данным. Например, используя следующий код, можно вставить новую строку в таблицу blog_post:

$post = new BlogPost;
$post->setName('тестовая запись');
$post->setContent('содержимое записи');
$post->save();

Пример модели:

namespace ruxonmodulesBlogmodels;

class BlogPost extends Object
{
    protected $sModuleAlias = 'Blog';
}

Мапперы это активная составляющая реализации паттерна The Data Mapper Pattern. Именно мапперы производят отображение записей базы данных на объекты приложения и обратно, организуют связи между объектами разных типов, различными средствами автоматизируют рутинные задачи.


namespace ruxonmodulesBlogmodelsmappers;

class BlogPostMapper extends ObjectMapper
{
    protected $sModuleAlias = 'Blog';

    public function tableName()
    {
        return 'blog_post';
    }

    public function fields()
    {
        return [
            'Id' => array(
                'Type'     => 'Integer',
                'Title'    => $this->t('Post', 'Id'),
                'Blocked'  => true,
                'Field'    => 'id'
            ),
            'PostDate' => array(
                'Type'     => 'DateTime',
                'Title'    => $this->t('Post', 'PostDate'),
                'Field'    => 'post_date'
            ),
            'Name' => array(
                'Type'    => 'String',
                'Title'   => $this->t('Post', 'Name'),
                'Field'   => 'name',
                'Validation' => array(
                    'Required'  => true,
                    'MaxLength' => 255,
                )
            ),
            'Content' => array(
                'Type'    => 'Text',
                'Title'   => $this->t('Post', 'Content'),
                'Field'   => 'content',
                'Validation' => array(
                    'Required'  => true,
                )
            ),
            'Cover' => array(
                'Type'    => 'String',
                'Title'   => $this->t('Post', 'Cover'),
                'Field'   => 'cover',
            ),
            'File' => array(
                'Type'    => 'String',
                'Title'   => $this->t('Post', 'File'),
                'Field'   => 'file',
            ),
            'IsActive' => array(
                'Type'     => 'Boolean',
                'Title'    => $this->t('Post', 'IsActive'),
                'Field'    => 'is_active'
            )
        ];
    }

    public function defaultScope()
    {
        return [
            'Order' => [
                'PostDate' => 'DESC'
            ]
        ];
    }

    public function scopes()
    {
        return [
            'active' => [
                'Criteria' => [
                    'IsActive' => true
                ]
            ]
        ];
    }

    public function relations()
    {
        return [
            'Comments' => [
                'Title' => $this->t('Post', 'Comments'),
                'Type'     => 'HasMany',
                'Field'    => 'post_id',
                'Alias'    => 'Comments',
                'ToMapperAlias'  => 'BlogCommentMapper',
            ]
        ];
    }
} 

Подробнее работа с ORM рассмотрена в соответствующем разделе.

Представления

Представление (view) - Отвечает за отображение информации (визуализацию).

Представления - это обычные php-файлы с суффиксом .tpl.php

Поздравляем!

Вы успешно установили приложение на Ruxon Framework!

<?php echo $this->getParam1(); // Выводим параметр, переданный из контроллера ?>

Темы оформления и шаблоны

Для изменения внешнего вида веб-приложений традиционно принято использовать темы оформления. Ruxon Framework не исключения, правда для наибольшей производительности сами шаблоны - обычные php файлы, только выводящие подготовленный набор данных.

Тема оформления (theme) - темы оформления являются традиционным способом настроить внешний вид страниц веб-приложения.

Шаблон (layout) - макет html-разметки.

Подробнее темы оформления рассмотрены в соответствующем разделе.

Заключение

Вот мы и рассмотрели базовые основы работы над созданием приложения на основе Ruxon Framework.

Продолжить изучение Ruxon Framework мы рекомендуем со страницы: Основы