Вопросы о пользовательских методах модели в DataMapper - PullRequest
0 голосов
/ 11 февраля 2011

Недавно я решил внедрить DataMapper в мое приложение CI, пока оно прекрасно работает. У меня есть пара вопросов, касающихся использования методов пользовательских моделей. Допустим, я хочу обновить куки пользователя, когда он входит в мое приложение. Мой контроллер выглядит примерно так (я исключил определение класса):

        if(isset($_POST['login_rememberme']) && $_POST['login_rememberme'] == TRUE)
        {
            // There's already a user object defined here called $user

            // Create two new random cookies
            $pid = rand_str(40);
            $sid = rand_str(40);

            // Set the cookies in the users browser
            setcookie('pid', $pid, COOKIE_EXPIRE, '/', FALSE, '', TRUE);
            setcookie('sid', $sid, COOKIE_EXPIRE, '/', FALSE, '', TRUE);

            // Update users relationsship with the new cookies in the db
            ???
        }

Файлы cookie хранятся в отдельной таблице из пользовательских данных (пароль, электронная почта и т. Д.). Отношения между файлами cookie и пользователями определены в таблице с именем cookies_users. Я думаю, что я мог бы создать метод в моей модели 'cookie' с именем setCookies и разрешить два параметра, sid и pid , но как мне использовать уже установленного пользователя модель в этом методе, я должен передать его в метод? Читая DataMapper, я не совсем уверен, рекомендуется ли бросать всю логику в контроллер и содержать модели в чистоте, насколько это возможно, или если все в порядке, чтобы упаковать ваши модели с помощью пользовательских методов. Кто-нибудь знает, что в этом вверху и внизу?

Спасибо за ваше время.

1 Ответ

1 голос
/ 16 февраля 2011

Хорошая особенность Codeigniter заключается в том, что он гибок в отношении того, что происходит в ваших моделях или контроллерах (технически вы можете отказаться от моделей в целом, но такой вид не отвечает цели MVC). Существуют разные точки зрения на дебаты «толстая модель, тонкий контроллер против толстого контроллера, тонкая модель», но я лично предпочитаю иметь прямой доступ к базам данных в моделях, существенно расширяя DataMapper. Однако я обнаружил, что вам, как правило, не нужно добавлять много пользовательских функций, если вы используете функции, доступные вам через DataMapper (обычно я получаю около полудюжины, и большинство из них just complex Выбирает, проверяет или вызывает кодировку JSON для API, которая может быть повторно использована в других контроллерах).

Если вы вызываете функции модели через объект, вы сможете использовать $this для доступа к установленному объекту. Оттуда вы можете выполнять свои собственные задачи по мере необходимости.

Так, например, у вас может быть $cookie->setCookie($sid, $pid) в вашем контроллере, а в вашей модели у вас может быть (код не проверен, просто пример):

function setCookie($sid, $pid){
  $this->pid = $pid;
  $this->sid = $sid;
  // Do other custom stuff.
  return $this->save();
}

То, что у вас есть в ваших моделях, во многом зависит от того, что вы пытаетесь выполнить, и от того, можно ли сделать то, что вы пытаетесь достичь, с помощью DataMapper. Для базового CRUD и отношений я обычно получаю только объекты в контроллере.

Кроме того, существует несколько библиотек аутентификации, которые обрабатывают сеанс. Возможно, вы захотите проверить их, если пытаетесь создать систему аутентификации.

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