2

我正在尝试在重定向后创建会话闪存消息。

我有控制器类

class Controller
{
    function __construct()
    {
    if(!empty($_SESSION['FLASH']))
        foreach($_SESSION['FLASH'] as $key => $val)
        $this->$key = $val;
    }
    function __destruct()
    {
        $_SESSION['FLASH']=null;
    }
}

我也有 Controller 子类 Home,其中函数通过路由运行,例如 /Home/Index => public function index()

class Home extends Controller
{
    function __construct()
    {
        parent::__construct();
    }

    public function index()
    {
        //where i want to display $this->message only once
        echo $this->message; // but $this->message is undefinded why? 
    }
    public function Post_register(){
        //after post form data
        // validation 

        // this function redirect to /Home/Index  above function index();
        Uri::redirectToAction("Home","Index",array('message' => 'some message'));
    }
}

和 uri 类函数,我在其中重定向用户。

public static function redirectToAction($controller,$method,$arr)
{
    $_SESSION['FLASH'] = $arr;
    header("Location:/".$controller.'/'.$method);
}

$this->message不确定为什么?

4

3 回答 3

1

这是因为你的 __destruct。执行完成后,调用 __destruct 函数并取消设置您的 $_SESSION['FLASH'] 因此,您的脚本中不再可以访问它。

从 php 手册

只要没有对特定对象的其他引用,或者在关闭序列期间以任何顺序调用,就会调用析构函数方法。

只需删除您的 __destruct 功能。

于 2013-09-11T18:23:52.627 回答
0

在您提供的代码中,$message从未定义为Controller该类或其派生类的成员Home。如果要使用该成员变量,则必须将其声明为类 IE 的成员,public $message然后将其设置为执行中的某个位置,大概是在您的Uri::redirectToAction函数中。

于 2013-09-11T18:13:11.447 回答
0

我为此类项目编写了一个库https://github.com/tamtamchik/simple-flash

一旦你安装了它,你就可以做到这一点。

在你的redirectToAction

public static function redirectToAction($controller,$method,$arr)
{
    flash($arr['message']);
    header("Location:/".$controller.'/'.$method);
}

并在index

public function index()
{
    echo flash()->display(); 
}

它将生成Bootstrap友好的警报消息。

于 2015-05-28T13:15:15.317 回答