Как стать автором
Обновить

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

А что будет если пользователь откроет раздел в другом окне? Так как не зная конкретной задачи, сложно судить об этом кусочке кода.
Сразу почему то не понял.
дописал кусочек в конец
Если вместо свича, попользоваться фабричным методом, то по идее будет красивше
Опять же если ввели public static function set($cnd_name, $cnd_val), то почему не использовать внутри кейсов, код сократит и не потеряет читаемость. Ну и мало ли может, вместо сессий будут куки использоваться, так меньше переделывать придется.

ИМХО сыровато
согласен, не подумал.
А почему бы не реализовать инициализацию состояний с помощью событий? Взять какой-нибудь system.post_controller_constructor и добавить в него вызов соответствующего метода. Так не придется переписывать базовый контроллер.

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 — это на любителя.

PS. Тоже не понял, что произойдет, если параллельно открыты две закладки в браузере :)
Так что тут непонятного? :) Весь код отрабатывается по значению из сессии. Если одна закладка его изменила — вторая воспользуется новым значением.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.