Строим блог на 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 = {
    ModelClass: this.getModelClass(),
    id: this.getQueryParam('id'),
    ...params
  };
  if (!MongoHelper.isValidId(params.id)) {
    throw new BadRequest;
  }
  let model = new params.ModelClass({module: this.module});
  model = await model.findById(params.id).with(params.with).one();
  if (!model) {
    throw new NotFound;
  }
  return model;
}

createDataProvider (config) {
  return new ActiveDataProvider({
    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.getPostParam('referrer');
  return ref ? ref : '';
}