Мне нужно показать сообщение после вставки некоторых данных в базу данных. Я использую Кохану. Есть ли способ сделать это с помощью флеш-сообщений? Это лучше, чем обновление заголовка.Как отобразить флеш-сообщение в Kohana 3
ответ
Хорошо. Вы можете использовать функцию Session::get_once()
. Но это позволит вам только один раз получить переменную, и вы не сможете использовать ее снова в том же запросе. Пока вы хотите, чтобы флэш-сообщение сохраняло полный цикл запросов. Чтобы справиться с этим, вам понадобится класс-оболочка, что-то вроде этого.
class Flash {
private $session;
private $messages = array();
private static $_instance; // Singleton object
public static function instance() {
if (! isset(self::$_instance)) {
self::$_instance = new Flash();
}
return self::$_instance;
}
private function __construct() {
$this->session = Session::instance();
$this->messages['current'] = $this->session->get_once('flash');
if(! is_array($this->messages['current'])) {
$this->messages['current'] = array();
}
}
public function add($key, $message === null) {
if (is_null($message)) {
$message = $key;
$key = null;
}
$this->messages['new'][$key] = $message;
$this->session->set('flash', $this->messages['new']);
return true;
}
public function get($item = null) {
if($item === null) {
return $this->messages['current'];
}
if(! array_key_exists($item, $this->messages['current'])) {
return null;
}
return $this->messages['current'][$item];
}
}
Использование:
$flash = Flash::instance(); $flash->add('A random message'); $flash->add('some_key', 'Some message'); $flash->get(); // array(0 => 'A random message', 'some_key' => 'Some message') $flash->get('some_key'); // 'A Random message'
Что это делает в основном на этапе инициализации извлекает текущее сообщение из сеанса, используя функцию get_once()
. Эта переменная не входит в объект Session, поэтому она будет продолжать этот запрос. Каждый раз, когда вы добавляете переменную, она сразу же сохраняется для объекта Session.
Есть только одна проблема; если вы используете вызовы ajax, сообщения будут доступны только в исходном запросе php, а не при последующих вызовах ajax. И нет никаких ограничений на то, какую переменную вы храните (но это must be serializable). Для этого вам также придется создавать некоторые проверки.
предупреждение: класс не тестируется, так что удивило бы меня, если вы не получите синтаксическую ошибку;)
И пойти на шаг дальше: вам потребуется дополнительное обновление в любом случае. Поток запроса должен быть таким: imo:
Запрос 1: Пользователь с информацией о компании Запрос 2: Пользователь отправляет обработанную форму. Данные вставляются в базу данных. Когда это будет сделано, пользователь будет перенаправлен . Запрос 3: отображается страница подтверждения (может быть «спасибо» или страница подробностей, что угодно).
Вы должны установить флеш-сообщение в запросе 2 и показать его в 3. Я бы не стал показывать страницу благодарности по запросу 2, потому что когда пользователь обновится, форма будет вывешена снова.
- 1. Как отобразить список зарегистрированных пользователей в Kohana 3 Auth Module?
- 2. insert_id в Kohana 3
- 3. Kohana 3 - легче, чем Kohana 2?
- 4. Kohana 3 pagination
- 5. Kohana 2.3/3 routing?
- 6. Kohana 3 Администратор Структура
- 7. PHP Session в Kohana 3
- 8. Kohana 3 - Rendering image
- 9. Kohana 3 простых отношения
- 10. Kohana 3 - Конструктор
- 11. Kohana 3 Controller Constructs
- 12. Kohana 3: Auth module
- 13. Kohana 3 - пользовательский маршрут
- 14. реализация uploadify в kohana 3
- 15. Ошибка в Kohana 3 ORM?
- 16. Как переопределить классы модулей в Kohana 3?
- 17. Как интегрировать Wordpress в Kohana 3
- 18. Как выполнить внешний запрос в Kohana 3?
- 19. Как использовать пользовательские библиотеки в Kohana 3
- 20. Kohana 3 - реализация режима обслуживания
- 21. Kohana 3 ORM: Несколько соединений
- 22. Kohana 3 ORM отсутствует NOT_WHERE?
- 23. Kohana 3 модуль структура вопрос
- 24. Kohana 3, Detect dynamic uri
- 25. Kohana 3 Auth in IE
- 26. Kohana 3: Вход без соли
- 27. Как лечить Database_Exception с Kohana 3 ORM
- 28. Kohana 3: Использование настраиваемого контроллера
- 29. Kohana 3 сеанса между функциями
- 30. Kohana 3 под PHP 5.1.6