2011-01-12 3 views
10

Ich würde gerne wissen, die beste Möglichkeit zur Anzeige Flash-Nachrichten in Kohana v3?Welches ist die beste Art, Flash-Nachrichten in kohana v3 anzuzeigen?

Einige Tutorials oder Beispiele wären hilfreich.

+0

Retaged diese Frage, da es nicht mit Blitz (wie in Adobes Flash-Technologie), aber mit PHH Flash-Daten (wie in Browser-Session-Daten) – goliatone

+2

Flash-Mitteilungen Definition verwendet: Flash-Nachrichten sind Nachrichten angezeigt als Reaktion auf Benutzerinteraktion mit einer Website. In der Regel werden diese nach dem Ausführen einer Aktion, die ein Formular übermittelt, oder als Reaktion auf einen Versuch, auf eine Ressource zuzugreifen, für die der Benutzer keine Berechtigung hat, als Erfolgs- oder Fehlernachrichten angezeigt. – Ciaran

Antwort

22

Meinst du wie Blitz Session Variablen von Kohana 2.x?

The latest Kohana supports get_once() das ist sehr ähnlich zu den alten Flash-Session-Variablen.

$session = Session::instance(); 

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

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

Das ist genau das, was ich meinte, das Äquivalent von $ this-> Session-> setFlash() in CakePHP. Vielen Dank! – ramabarca

+4

Warum hast du seine Antwort nicht akzeptiert? – Brenden

0

suchen ich eine wirklich einfache Klasse für dieses eine Mal geschrieben habe. Schau es dir unten an. Verwendungsbeispiele unter

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]; 
    } 
} 

Beispiele (vorausgesetzt, wird diese Klasse gespeichert als 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: lustig ... aus irgendeinem Grund diese Frage irgendwo auftauchte, hatte nicht bemerkt, es war wirklich alt ... sorry dafür!

2

Ich denke, die get_once ist eine großartige Funktion, aber was, wenn Sie die Daten getrennt von den regulären Daten halten möchten, ist hier eine grundlegende Klasse, die "Session" überlastet, so dass Sie Flash-Daten mit codeigniter Stil verwenden können irgendein Datenspeicher.

<?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; 
} 
} 
?> 

Ich weiß, es war eine Antwort auf diese, und wie ich bereits erwähnt, die get_once Methode ist groß und alle, aber ich genieße Auto Garbage Collection vieles mehr.

Wenn Sie Verbesserungen an diesem Code haben, lassen Sie es mich wissen, es war großartig für mich bisher.