Строим блог на Areto фреймворк

Базовый контроллер

Удобно иметь общие методы для контроллеров модуля собранными в единственном классе. В админке в этой роли выступает базовый контроллер, описываемый в файле module/admin/component/Controller.js. Остальные контроллеры модуля наследуются от него прямо и косвенно.

Директория components внутри модуля (приложения) используется для размещения различных дополнительных классов, использующихся моделями, контроллерами или представлениями.

module/admin/component/Controller.js

const Base = require('areto/base/Controller');
module.exports = class Controller extends Base {
  // place methods here
};

Метод getRefUrl возвращает адрес предыдущей страницы. Адрес извлекается из заголовка запроса или POST-параметра.

module/admin/component/Controller.js

async getModel (params) {
  params = Object.assign({
    'ModelClass': this.getModelClass(),
    'id': this.getQueryParam('id')
  }, params);
  return MongoHelper.isValidId(params.id)
    ? params.ModelClass.findById(params.id).with(params.with).one()
    : this.throwNotFound();
}

createDataProvider (config) {
  return new ActiveDataProvider(Object.assign({
    controller: this
  }, config));
}

async renderDataProvider (provider, template, data) {
  await provider.prepare();
  await this.render(template, data);
}

Метод backToRef переадресует текущий запрос на адрес, полученный из POST запроса или аргумента url.

module/admin/component/Controller.js

getRefUrl () {
  let ref = this.isGet()
    ? this.getHeader('referrer')
    : this.getBodyParam('referrer');
  return ref ? ref : '';
}