Which is the best way to display 'flash messages' in kohana v3?

后端 未结 5 1620
逝去的感伤
逝去的感伤 2021-02-04 13:52

I would like to know the best way to display flash messages in Kohana v3?

Some tutorials or examples would be helpful.

5条回答
  •  北恋
    北恋 (楼主)
    2021-02-04 14:14

    I think the get_once is a great function, but what if you want to keep the data actually separate from the regular data, here's a basic class that overloads "Session" so that you can use "codeigniter" style flashdata calls with any data-store.

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

    I realize there was an answer to this, and like i stated before, the get_once method is great and all, but i enjoy auto garbage collection much more.

    If you have any improvements on this code, let me know, its been great to me so far.

提交回复
热议问题