Параметры контроллеров

 

Всем доброго времени суток. Сегодня, в продолжения цикла по созданию своей системы управления контентомRS-MINI, мы реализуем несколько простых методов для получения параметров контроллера. Эти методы очень просты, но без них нам двигаться дальше будет невозможно.

Предполагается, что параметром контроллера в RS-MINI будет обычный элемент ассоциативного массива, чей ключ является именем параметра, а значение — значением параметра.

Хранятся эти параметры будут в таблице rs_connect, в поле connect_value. Тем самым у нас реализуется возможность запускать один и тот же контроллер с разными параметрами. В базе данных параметры буду храниться в виде обычного текста:

param1: value1
param2: value2
param3: value3

Каждый новый параметр будет начинаться с новой строки. Имя параметра от значение параметра отделяется двоеточием. В нашу сегодняшнюю задачу входит распарсить подобную строку, сделав из нее массив

Тестовые параметры

Давайте напичкаем нашу связь контроллера и страницы тестовыми параметрами. Но прежде чем мы начнем, хочу кое-что уточнить. Наши контроллеры должны иметь один обязательный параметр — active. Его значение должно быть либо enable либо disable. Это системный параметр, и позволит нам включать или отключать контроллер на странице. Это я к тому, что среди тестовых параметров будет один системный (то есть реальный) Улыбаюсь

В общем вот скуль запрос на добавление этих самых параметров

UPDATE
    `rs_connect`
        SET
            `connect_value` = 'active: enable\nparam1: value1\nparam2: value2'
        WHERE
            `connect_id` = 1
;

Как видите их три:

  • системный active
  • некий param1
  • и некий param2

Методы для работы с параметрами

Теперь нам нужно научить нашу систему работать с этими параметрами. Какие методы нам понадобятся?

  • Метод для сохранения параметров передаваемых не из базы данных. Этот метод понадобится нам в нашем приложении. В каждый контроллер мы будем передавать информацию о станице на которой этот контроллер был запущен. Нам понадобятся такие данные как
    • id страницы,
    • родитель страницы
    • и псевдоним.
    Я про это рано заговорил, но когда мы дойдем до передачи этих значений в контроллер, я напомню, что мы про это уже говорили (хоть и вскользь)
  • Метод позволяющий получить все параметры контроллера. Подобный метод понадобится нам для того что бы передать параметры одной страницы в другую страницу по наследству.
  • Метод позволяющий получить значение параметра по имени. Тоже будет использован в нашем приложении. В частности для получения значения системного параметра active
  • Ну и на по следок — метод позволяющий распарсить строку параметров и получить ассоциативный массив.

Давайте продемонстрирую код класса controller.class.php (если забыли, этот файл лежит в папке /rs-mini/core/)

<?php

/*
 * @package RS-MINI
 * @copyright (c) 2015 Alexey Glumov aka Rio-Shaman (support@rio-shaman.ru)
 * @license GNU General Public License version 2; see LICENSE.txt
 *
 */
 
namespace core;

if(!defined('RS-MINI')) die();

/*
 * controller v 1.0
 *
 * Класс хранит инфу о контроллере
 *
 */

class controller
{   
    /*
     * свойство id контроллера
     *
     * @var    - integer
     * @access - public
     */
    
    public $controllerID;
    
    /*
     * свойство имя контроллера
     *
     * @var    - string
     * @access - public
     */
    
    public $controllerName;
    
    /*
     * свойство параметров контроллера (строчка)
     *
     * @var    - string
     * @access - private
     */
    
    private $controllerParam;
    
    /*
     * свойство параметров контроллера (массив)
     *
     * @var    - array
     * @access - private
     */
    
    private $paramList = array();
    
    /*
     * свойство наследования контроллера
     *
     * @var    - boolean
     * @access - public
     */
    
    public $controllerInherit;
    
    /*
     * свойство определяет унаследовался ли контроллер
     *
     * @var    - boolean
     * @access - public
     */
    
    public $inheritFlag = FALSE;

/*
     * контсруктор. получаем объекты переданные по ссылке
     *
     * @access - public
     *
     * @param array connect - массив с полями подключения. в часности важны ключи
     *                        ['controller_id']
     *                        ['controller_name']
     *                        ['connect_value']
     *                        ['connect_inherit']
     */
    
    public function __construct(&$connect)
    {
        // id контроллера (из таблицы rs_controller)
        $this->controllerID      = $connect['controller_id'];
        // имя контроллера (из таблицы rs_controller)
        $this->controllerName    = $connect['controller_name'];
        // строка с параметрами контроллера (из таблицы rs_controller)
        $this->controllerParam   = $connect['connect_value'];
        // флаг позволяющий определить будет ли контроллер
        // наследоваться или нет
        $this->controllerInherit = $connect['connect_inherit'];
        
        // вызов метода который сделает из строки параметров
        // массив
        $this->gatherParam();
    }

    /*
     * метод устанавливаем значение в свойство $this->params
     *
     * @access - public
     * @return - сам себя
     *
     */
    
    public function setParam($name, $value)
    {
        $this->paramList[trim($name)] = trim($value);
        
        return $this;
    }
    
    /*
     * метод преобразует строчку параметров в массив
     *
     * @access - private
     *
     */
    
    private function gatherParam()
    {
        if (empty($this->controllerParam))
            return;
        
        $paramList = explode("\n", $this->controllerParam);
        
        foreach ($paramList as $row) {
            $param                              = explode(':', trim($row));
            $this->paramList[trim($param[0])]   = trim($param[1]);
        }
    }
    
    /*
     * метод возвращает параметры
     *
     * @access - public
     * @return - массив с параметрами или null
     */
    
    public function getParams()
    {
        return (!empty($this->paramList)) ? $this->paramList : NULL;
    }

    /*
     * метод возвращает параметр
     *
     * @access - public
     * @return - строку с значением или null
     *
     * @param string name - имя параметра
     */
    
    public function getParam($name)
    {
        return (isset($this->paramList[$name])) ? $this->paramList[$name] : NULL;
    }
}

Да, я забыл сказать про конструктор класса. Как видите он просто распределяет данные которые были ему переданы в виде массива из класса page.class.php метода getController(). Ну и запускает метод преобразует строчку параметров в массив.

Заключение

Сейчас, если запустить главную страницу нашего сайта, то мы увидим вот такой дамп

результат в виде дампа

Я показал лишь часть дампа, а именно ту часть в которой лежит список контроллеров. Как видите сейчас в свойстве paramList лежит ассоциативный массив чей ключ является именем параметра, а значение — значением этого самого параметра. Статья получилась небольшой, и почти не информативной, тем не менее мы сегодня реализовали одну из главных идей CMS RS-MINI

Результат работы Вы можете скачать в конце этой статьи. Если у Вас есть какие-либо вопросы, то пишите их в комментариях.

Всего Вам наилучшего, на сегодня все!

Прикрепленные файлы

 

Возможно Вам будут интересны следующие заметки

Комментарии (0)

Ваше имя *
Сайт
Ваш E-mail *
Ваше сообщение *
 
К данной статье пока нет комментариев.