Комментарии 9
А что будет если пользователь откроет раздел в другом окне? Так как не зная конкретной задачи, сложно судить об этом кусочке кода.
Если вместо свича, попользоваться фабричным методом, то по идее будет красивше
Опять же если ввели public static function set($cnd_name, $cnd_val), то почему не использовать внутри кейсов, код сократит и не потеряет читаемость. Ну и мало ли может, вместо сессий будут куки использоваться, так меньше переделывать придется.
ИМХО сыровато
ИМХО сыровато
А почему бы не реализовать инициализацию состояний с помощью событий? Взять какой-нибудь system.post_controller_constructor и добавить в него вызов соответствующего метода. Так не придется переписывать базовый контроллер.
Почему не switch(Router::$controller) тогда уж? Хотя все равно switch не к месту смотрится. Наверное надо где-то хранить наборы состояний для различных контроллеров, а не в коде их прописывать.
PS. Тоже не понял, что произойдет, если параллельно открыты две закладки в браузере :)
Session::instance()->set('cnd_controller', Router::$controller);
switch (Session::instance()->get('cnd_controller'))
Почему не switch(Router::$controller) тогда уж? Хотя все равно switch не к месту смотрится. Наверное надо где-то хранить наборы состояний для различных контроллеров, а не в коде их прописывать.
PS. Тоже не понял, что произойдет, если параллельно открыты две закладки в браузере :)
По поводу реализации с помощью событий. Хм… Реализация с помощью post_controller_constructor не совсем удачна, именно потому что событие post. Тоесть установка состояния в самом конструкторе не будет иметь эффекта — событие все обнулит. Я не говорю что устанавливать НЕдефолтовые состояния в конструкторе — это хорошо. Но такое ограничение это плохой стиль.
Тогда уже наверное лучше использовать событие pre_controller — но вынос инициализации дефолта за пределы контроллера — тоже не по фен-шую.
Я сам С++ник, поэтому мне такое ООП-шное решение (с базовым конструктором) ближе.
Кстати, раз уже коснулся — оооочень не хватает полиморфизма функций в php, и в частности конструкторов, для реализации моделей.
Использование Session::instance()->get('cnd_controller') или Router::$controller — это на любителя.
Тогда уже наверное лучше использовать событие pre_controller — но вынос инициализации дефолта за пределы контроллера — тоже не по фен-шую.
Я сам С++ник, поэтому мне такое ООП-шное решение (с базовым конструктором) ближе.
Кстати, раз уже коснулся — оооочень не хватает полиморфизма функций в php, и в частности конструкторов, для реализации моделей.
Использование Session::instance()->get('cnd_controller') или Router::$controller — это на любителя.
PS. Тоже не понял, что произойдет, если параллельно открыты две закладки в браузере :)
Так что тут непонятного? :) Весь код отрабатывается по значению из сессии. Если одна закладка его изменила — вторая воспользуется новым значением.
Так что тут непонятного? :) Весь код отрабатывается по значению из сессии. Если одна закладка его изменила — вторая воспользуется новым значением.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Реализация состояний для веб-приложения