2011-01-12 8 views
10

Me gustaría saber la mejor manera de mostrar mensajes flash en Kohana v3?¿Cuál es la mejor manera de mostrar 'mensajes flash' en kohana v3?

Algunos tutoriales o ejemplos serían útiles.

+0

Retaged esta pregunta, ya que no está relacionado con flash (como en la tecnología Flash de Adobe), pero con datos PHH flash (como en los datos de sesión del navegador) – goliatone

+2

flash mensajes definición: mensajes flash son mensajes que aparecen en respuesta a la interacción del usuario con un sitio. Normalmente, estos se muestran como mensajes de éxito o error después de realizar una acción que envía un formulario, o en respuesta a un intento de acceder a un recurso para el cual el usuario no tiene permiso. – Ciaran

Respuesta

22

¿Te refieres a las variables de la sesión de destello de Kohana 2.x?

The latest Kohana supports get_once() que es bastante similar a las antiguas variables de sesión de flash.

$session = Session::instance(); 

$session->set('test', 'Hello, World!'); 

// The session variable is returned and removed. 
$test = $session->get_once('test'); 
+0

Eso es exactamente lo que quise decir, el equivalente de $ this-> Session-> setFlash() en cakephp. ¡Gracias! – ramabarca

+4

¿por qué no aceptaste su respuesta? – Brenden

0

He escrito una clase muy simple para esto una vez. Compruébalo a continuación. Ejemplos de uso por debajo de

class Notice { 
    private static $session; 
    private static $initialized = false; 

    // current notices 
    private static $notices = array(); 

    function __construct() { 
    } 

    static function init() { 
     self::$session = Session::instance(); 
     self::$notices['current'] = json_decode(self::$session->get_once('flash')); 
     if(!is_array(self::$notices['current'])) self::$notices['current'] = array(); 
     self::$initialized = true; 
    } 

    static function add($notice, $key=null) { 
     if(!self::$initialized) self::init(); 
     if(!is_null($key)) { 
      self::$notices['new'][$key] = $notice; 
     } else { 
      self::$notices['new'][] = $notice; 
     } 
     self::$session->set('flash', json_encode(self::$notices['new'])); 
     return true; 
    } 

    static function get($item = null) { 
     if(!self::$initialized) self::init(); 
     if($item == null) { 
      return self::$notices['current']; 
     } 
     if(!array_key_exists($item, self::$notices['current'])) 
       return null; 
     return self::$notices['current'][$item]; 
    } 
} 

Ejemplos (siempre que esta clase se guarda como APPPATH . 'classes/notice.php'):

Notice::add('Something great has happened!'); 
Notice::add('Exciting! I\'ve got something to tell you!', 'message'); 

echo Notice::get('message'); // "Exciting! I've got ..." 
foreach(Notice::get() as $message) { 
    echo $i++ . $message .'<br />'; 
} 

EDIT: divertido ... por alguna razón esta pregunta apareció en alguna parte, no se dio cuenta que era una realmente viejo ... ¡lo siento por eso!

2

Creo que get_once es una gran función, pero si desea mantener los datos realmente separados de los datos regulares, aquí hay una clase básica que sobrecarga "Session" para que pueda usar llamadas flashdata de estilo "codeigniter" cualquier data-store

<?php defined('SYSPATH') or die('No direct script access.'); 
abstract class Session extends Kohana_Session { 

/** 
* This calls the parent Kohana_Session constructor and processes 
* new flashdata to flashdata, and flashdata to old flashdata 
* 
* @param array configuration 
* @param string session id 
* @return void 
* @uses Kohana_Session::__construct 
*/ 
public function __construct(array $config = NULL, $id = NULL) 
{ 
    parent::__construct($config,$id); 

    if(array_key_exists('___of',$this->_data)){ 
     //Remove old Flash data 
     unset($this->_data['___of']); 
    } 

    if(array_key_exists('___flash',$this->_data)){ 
     //Move current last requests flash data to old flash data 
     $this->_data['___of'] = $this->_data['___flash']; 
     unset($this->_data['___flash']); 
    } 

    if(array_key_exists('___nf',$this->_data)){ 
     //Move Last Requests added data to the flash data 
     $this->_data['___flash'] = $this->_data['___nf']; 
     unset($this->_data['___nf']); 
    } 
} 

/** 
* keeps a variable set in the sessions flashdata array. 
* 
*  $session->set_flashdata('foo', 'bar'); 
* 
* @param string variable name 
* @param ... 
* @return $this 
*/ 
public function keep_flashdata($k) 
{ 
    $args = func_get_args(); 

    if(array_key_exists('___of',$this->_data)){ 
     foreach($args as $key){ 
      if(array_key_exists($key,$this->_data['___of'])){ 
       //So we were going to trash it... 
       $this->set_flashdata($k,$this->_data['___of'][$key],true); 
      } 
     } 
    } 

    $this->_data['___nf'][$key] = $value; 

    return $this; 
} 

/** 
* Set a variable in the sessions flashdata array. 
* 
*  $session->set_flashdata('foo', 'bar'); 
* 
* @param string variable name 
* @param mixed value 
* @return $this 
*/ 
public function set_flashdata($key, $value, $current=false) 
{ 
    if(!array_key_exists('___nf',$this->_data)){ 
     $this->_data['___nf'] = array(); 
    } 

    $this->_data['___nf'][$key] = $value; 

    if($current){ 
     if(!array_key_exists('___flash',$this->_data)){ 
      $this->_data['___flash'] = array(); 
     } 
     $this->_data['flash'][$key] = $value; 
    } 

    return $this; 
} 

/** 
* Set a variable by reference in the sessions flashdata array. 
* 
*  $session->bind_flashdata('foo', $foo); 
* 
* @param string variable name 
* @param mixed referenced value 
* @return $this 
*/ 
public function bind_flashdata($key, & $value) 
{ 
    if(!array_key_exists('___nf',$this->_data)){ 
     $this->_data['___nf'] = array(); 
    } 

    $this->_data['___nf'][$key] =& $value; 

    return $this; 
} 

/** 
* Removes a variable in the session array. 
* 
*  $session->delete_flashdata('foo'); 
* 
* @param string variable name 
* @param ... 
* @return $this 
*/ 
public function delete_flashdata($key) 
{ 
    $args = func_get_args(); 

    if(array_key_exists('___nf',$this->_data)){ 
     foreach ($args as $key) 
     { 
      if(array_key_exists($key,$this->_data['___nf'])){ 
       unset($this->_data['___nf'][$key]); 
      } 
     } 
    } 
    return $this; 
} 

/** 
* Get a variable from the sessions flashdata array. 
* 
*  $foo = $session->get_flashdata('foo'); 
* 
* @param string variable name 
* @param mixed default value to return 
* @return mixed 
*/ 
public function get_flashdata($key, $default = NULL) 
{ 
    if(array_key_exists('___flash',$this->_data) && array_key_exists($key,$this->_data['___flash'])){ 
     return $this->_data['___flash'][$key]; 
    } else if(array_key_exists('___nf',$this->_data) && array_key_exists($key,$this->_data['___nf'])){ 
     return $this->_data['___nf'][$key]; 
    } 

    return $default; 
} 

/** 
* Get and delete a variable from the session array. 
* 
*  $bar = $session->get_once('bar'); 
* 
* @param string variable name 
* @param mixed default value to return 
* @return mixed 
*/ 
public function get_flashdata_once($key, $default = NULL) 
{ 
    $value = $this->get_flashdata($key, $default); 

    if(array_key_exists($key, $this->_data['___flash'])){ 
     unset($this->_data['___flash'][$key]); 
    } 

    if(array_key_exists($key, $this->_data['___nf'])){ 
     unset($this->_data['___nf'][$key]); 
    } 

    return $value; 
} 
} 
?> 

me di cuenta que había una respuesta a esto, y como he dicho antes, el método get_once es grande y todo, pero me gusta la recolección de basura de auto mucho más.

Si tiene alguna mejora en este código, hágamelo saber, ha sido excelente para mí hasta ahora.

Cuestiones relacionadas