Я пытаюсь создать многосайтовый плагин для моего приложения 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
внутри плагина?