Как создать зависящий от фреймворка пакет composer, который использует сессию?

#php #frameworks #composer-php #decoupling

#php #фреймворки #композитор-php #развязка

Вопрос:

Я переделываю свою существующую библиотеку CodeIgniter в повторно используемый пакет composer, не зависящий от фреймворка.

Мой код зависит от CI session и uri библиотек и представлений.

Я наблюдал за этим. Читать это

Вот что я подумал сделать:

  • создайте интерфейс сеанса
  • создайте класс, который использует session CI, расширив интерфейс

но мне все еще немного неясно, как это сделать.

Обновить

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

Ответ №1:

В PHP у вас есть массив с именем $_SESSION . Вы могли бы реализовать class , называемый SessionHandler . В этом class вам следует создать метод для запуска сеанса и другой для уничтожения сеанса. Вы также можете создавать методы для выполнения других действий. Очень простая реализация была бы такой:

 class SessionHandler {

    private static $isStarted = false;

    public static function startSession() {
        if (!SessionHandler::$isStarted amp;amp; session_status() === 1) {
            SessionHandler::$isStarted = true;
            session_start();
        }
    }

    public function destroySession() {
        session_destroy();
    }

    public function getElement($key, $defaultValue = null) {
        return ((isset($_SESSION[$key])) ? ($_SESSION[$key]) : ($defaultValue));
    }

    public function setElement($key, $value) {
        $_SESSION[$key] = $value;
    }

    public function __construct() {
        SessionHandler::startSession();
    }

}
  

Комментарии:

1. Здесь я согласен с Лайошем Арпадом. Вы также можете проверить пример того, как это делается в Aura. Auth github.com/auraphp/Aura.Auth/blob /… и github.com/auraphp/Aura.Auth/blob/… . Однако он не запускает session первым, а только при вызове start.