Всем доброго времени суток. Сегодня, в продолжения цикла по созданию своей системы управления контентом — 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
;
Как видите их три:
Теперь нам нужно научить нашу систему работать с этими параметрами. Какие методы нам понадобятся?
Давайте продемонстрирую код класса 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
Результат работы Вы можете скачать в конце этой статьи. Если у Вас есть какие-либо вопросы, то пишите их в комментариях.
Всего Вам наилучшего, на сегодня все!