Search code examples
phpsession-variablesfat-free-framework

How to use Flash messages in fat free framework?


I am trying to make an small app so I have choosen Fat Free Framework. I need to show some messages based on successful or error. Suppose if I want to add an user then if successfully added show message that user has been added successfully or if not show error message that user cannot be added. I cannot figure it out. Here is my UsersController code

 public function index(){
     $user = new User($this->db);
     $this->f3->set('users',$user->all());
     //there should be a way to decide if its error message or success and after display, 
     //it shouldn't be displayed again for the same task.
     //or may be it should be check in view file, I don't know where is the correct place
     // to do it
     $this->f3->set('page_head','User List');
     $this->f3->set('view','users/list.htm');

}

  public function create(){
    if($this->f3->exists('POST.create')){
    $user = new User($this->db);
    $user->add();
    //set session here to show in view file after redirect to list page
    $this->f3->reroute('/users');
   } else{
    $this->f3->set('page_head','Create User');
    $this->f3->set('view','users/create.htm');
   }
 }

Solution

  • My flash messages controller looks like this: https://github.com/ikkez/f3-flash/blob/master/lib/flash.php

    To set a message i do:

    if ($this->resource->updateProperty(array('_id = ?', $params['id']), 'published', true)) {
      \Flash::instance()->addMessage('Your post was published. Hurray!', 'success');
    } else {
      \Flash::instance()->addMessage('This Post ID was not found', 'danger');
    }
    $f3->reroute('/admin/post');
    

    To render the messages i include this template in my layout https://github.com/ikkez/fabulog/blob/master/app/ui/templates/alert.html which calls a function that dumps and clears all messages, so they will only be displayed once. You can also use the SESSION in a template token like {{@SESSION.flash}} and use it for <repeat> in the template.