Mensagem de flash da session php

Estou tentando criar uma mensagem flash de session após o redirecionamento.

eu tenho class de controlador

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

Além disso, eu tenho o Controller child class Home, onde as funções são executadas por via, como / 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')); } } 

e a function de class uri onde eu redireciono o usuário.

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

mas $this->message é indevida o porquê?

No código que você forneceu $message nunca é definida como um membro da class Controller ou sua class derivada Home . Se você quiser usar essa variável de membro, você deve declará-lo como membro da class, IE public $message e, em seguida, configurá-lo em algum lugar na execução, presumivelmente na sua function Uri::redirectToAction .

É por causa do seu __destruir. Quando a execução é concluída, a function __destruct é chamada e destrói seu $ _SESSION [‘FLASH’], portanto, não é mais acessível no seu script.

Do manuel php :

O método destruidor será chamado assim que não houver outras referências a um object específico, ou em qualquer ordem durante a sequência de desligamento.

Apenas remova sua function __destruct.

Eu escrevi uma biblioteca apenas para este tipo de projetos https://github.com/tamtamchik/simple-flash .

Depois de instalá-lo, você pode fazer isso.

Em seu redirectToAction :

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

E no index :

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

Isso gerará mensagens de alerta amigáveis ​​do Bootstrap .