Различные наборы данных на поддомен в Cakephp? - PullRequest
0 голосов
/ 04 сентября 2011

Я пишу приложение для личных закладок и ищу способ иметь совершенно разный контент между поддоменами.

Я написал приложение, и оно отлично работает, но еще не реализовало несколько коллекций.У меня есть следующие модели:

  • Метка (пока не используется)
  • Закладка
  • Тема

Закладки классифицированы по темам иЯ планирую разрешить добавлять теги в будущем и посмотреть, поможет ли это мне легче управлять своими закладками.

В настоящее время у меня проблема в том, что я хотел бы разделить закладки в целом.Я хочу использовать субдомены, такие как webdevelopment.bookmarks.local, languages.bookmarks.local, linux.bookmarks.local, которые работают со всем собственным набором доменов и закладок.

Я подумываю добавить новую модель с именем Set (сокращение от "наборы закладок ") и определения наборов на основе субдомена.

В соответствии с этим планом мне придется переписать все $this->...->find -запросы во всем приложении, чтобы они содержали условие "set_id" = $SubdomainBasedSetid".

Хотя это не было бы такой большой работой, мне было интересно, можно ли сделать это умнее, может быть, Cake будет видеть только соответствующую закладку, установленную для субдомена.

Ответы [ 2 ]

1 голос
/ 04 сентября 2011

хорошо, ваше решение правильно. Но вместо использования поддоменов вы можете использовать префикс, так что вам не нужно проверять и устанавливать себя. Поскольку вы используете субдомены, я предполагаю, что эти наборы являются фиксированными или редко меняются. Таким образом, вам на самом деле не нужна таблица наборов, просто используйте имя набора непосредственно в записи закладки, чтобы вам не приходилось преобразовывать имя в идентификатор.

0 голосов
/ 05 сентября 2011

В соответствии с этим планом мне придется переписать все $this->...->find -запросы во всем приложении, чтобы они содержали условие "set_id" = $SubdomainBasedSetid".

Поскольку все модели расширяют AppModel, онтам можно редактировать все запросы до того, как они произойдут (т. е. DRY ).:)

// app/app_model.php
class AppModel extends Model {

    public function beforeFind($queryData) { // old query
        // make changes
        return $queryData; // new query
    }

Однако, если вы не хотите, чтобы эта функциональность была доступна для всех моделей (или даже если вы хотите сделать это сейчас), лучшим вариантом может быть поведение, так как это позволяет вам выбирать, гдеи когда он загружен:

// app/models/behaviors/subdomain.php
class SubdomainBehavior extends ModelBehavior {

    protected $_defaults = array('field' => 'Site.subdomain');

    public function setup(&$model, $config = array()) {
        $this->settings[$model->alias] = array_merge($this->_defaults, $config);
    }

    public function beforeFind(&$model, $queryData) {
        $domain = $_SERVER['SERVER_NAME'];
        $subdomain = substr($domain, 0, strpos($domain, "."));
        $queryData['conditions'][$this->settings['field']] = $subdomain;
        return $queryData;
    }

}

// app/app_model.php
class AppModel extends Model {

    $actsAs = array('Subdomain' => array('field' => 'Set.slug'));

}
  • Метка (пока не используется)

Чтобы сохранить повторное изобретение колеса, вы можете посмотретьв тегах CakeDC и используются плагины (последний содержит SluggableBehavior , который поможет с созданием дружественных частей URL, таких как субдомены).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...