Плагин Cake PHP для мультисайтов - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь создать многосайтовый плагин для моего приложения Cake PHP. Цель - сохранить одну базу кода для всех сайтов с разным содержанием. Поэтому я решил создать таблицу sites с заголовком, названием темы и некоторыми другими полями

CREATE TABLE `sites` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` int(11),
  `title` varchar(255),
  `theme` varchar(100),
);

и таблицей domains, так как один сайт может быть достигнут несколькими доменами

CREATE TABLE `domains` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `site_id` int(11),
  `domain` varchar(255),
);

И все мои таблицы содержимого будут иметь поле site_id (в основном articles на данный момент), например [упрощенное]

CREATE TABLE `articles` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `site_id` int(11),
  `user_id` int(11),
  `title` varchar(500),
);

Я хочу создать свой плагин, который будет получать сайт из БД по его домену и изменять запросы БД добавление site_id = [id] в SELECT s и INSERT s.

Итак, я создал MultisiteBehavior, и он выполнил запрос на изменение задания, как ожидалось, используя beforeSave и beforeFind хуки.

Вопрос:

Как правильно разместить журнал обнаружения сайтов c?

Я сделал byDomainOrDefault(string $domain = null) метод в SitesTable, который запрашивает БД и возвращает Site объект . Теперь мне нужно сделать что-то вроде

$sites = TableRegistry::getTableLocator()->get('Sites');
$currentSite = $sites->byDomainOrDefault($this->request->host());
Configure::write('Multisite.currentSite', $currentSite);

Я думал, что плагин bootstrap() hook - хорошее место для этого, но я не могу получить доступ к запросу там.

Plugin AppController::initialize() кажется тоже позднему промежуточному программному обеспечению Pugin лучше не работать с БД, я думаю

Так где же правильное место для установки моих настроек Multisite.currentSite внутри плагина?

...