флэш-сообщение php session

Я пытаюсь создать сеансовое флэш-сообщение после перенаправления.

У меня есть класс контроллера

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 не определено почему?

В коде, который вы указали, $message никогда не определяется как член класса Controller или его производного класса Home . Если вы хотите использовать эту переменную-член, вы должны объявить ее как член класса, сообщение IE public $message и затем установить ее где-то в исполнении, предположительно в вашей функции Uri::redirectToAction .

Это из-за вашего __destruct. Когда выполнение закончено, вызывается функция __destruct, и поэтому она отключает ваш $ _SESSION ['FLASH'], поэтому она больше не доступна в вашем скрипте.

От php manuel :

Метод деструктора будет вызываться, как только нет других ссылок на конкретный объект или в любом порядке во время последовательности выключения.

Просто удалите функцию __destruct.

Я написал библиотеку только для этого типа проектов 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(); } 

Он будет генерировать сообщения с бутстрапом.