MZZ.Framework 1.0
Разделы

12.2 Расширение модулей

12.2.1 Mappers

12.2.1 Mappers

Часто бывает, что необходимо поменять некоторые вещи в коробочных модулях MZZ, например, модифицировать $map (todo: ссылка туда, где знают, что такое MAP объекта) или же просто добавить недостающий метод в маппер. В таком случае подойдет способ, описанный в этой главе, но он не очень удобен по ряду причин.

MZZ предлагает немного иной подход к проблеме переопределения частей модуля в приложениях. Рассмотрим его на примере модуля user.

Мы имеем userMapper.php следующего содержания (тело класса скрыто, весь листинг вы можете посмотреть, открыв файл <MZZ>/system/modules/user/mappers/userMapper.php):

class userMapper extends mapper
{
 
    /* ... */
 
}
?>

И мы хотим переопределить этот маппер с целью добавить новый метод searchAllLastLoggedIn — метод, возвращающий нам всех пользователей, которые приходили на сайт не ранее заданной даты

Для реализации этой идеи достаточно создать файл в каталоге <project>/modules/user/mappers/appUserMapper.php, где <project> это путь до вашего приложения (опция systemConfig::$pathToApplication), а appUserMapper.php — новое имя маппера, которое было образовано путем добавления приставки app к базовому имени маппера. Префикс app в данном случае является стандартным и одинаковым для всех переопределяемых мапперов.

appUserMapper.php будет выглядеть примерно так:

fileLoader::load('modules/user/mappers/userMapper');
 
class appUserMapper extends userMapper
{
    public function searchAllLastLoggedIn($time)
    {
        $criteria = new criteria;
        $criteria->where('last_login', $time, criteria::GREATER);
 
        return $this->searchAllByCriteria($criteria);
    }
 
}

Несложно догадаться, что теперь можно добавлять, переопределять любые методы и свойства базового маппера userMapper