Session Flash Data

Μερικές φορές θέλουμε να αποθηκεύσουμε στο session κάποιο αντικείμενο/μεταβλητή μόνο για το επόμενο request στον server. Αυτό μπορούμε να το πετύχουμε με τα flash data και σύμφωνα με τα παρακάτω παραδείγματα.

Session::flash('key', 'value');
redirect_to_homepage($url);

Για να πάρουμε αυτό που αποθηκεύσαμε στο session γράφουμε

Session::get('key');

Αν θέλουμε να εμφανίσουμε κάποιο μήνυμα στο πάνω μέρος της οθόνης, μπορούμε να χρησιμοποιήσουμε την Session::Messages($message_or_messages_array, $class='alert-warning') ως εξής:

Session::Messages('Υπάρχει λάθος στην φόρμα');
Redirect_to_homepage($url);

Το μήνυμα θα εμφανιστεί αυτόματα χωρίς να καλέσουμε κάποια function με default css class την alert-warning (του boostrap). Αν θέλουμε κάποια άλλη κλάση την περνάμε σαν δεύτερη παράμετρο. Για περισσότερα από ένα μηνύματα μπορούμε να κάνουμε το παρακάτω:

Session::Messages(array('Το πεδίο όνομα είναι υποχρεωτικό', 'Το πεδίο όνομα πρέπει να περιέχει μόνο αλφαβητικούς χαρακτήρες'));

Για να αποθηκεύσουμε στο Session την $_POST (π.χ. για να κάνουμε repopulate την φόρμα μας στο επόμενο request σε περίπτωση Failed validation) μπορούμε να κάνουμε το παρακάτω:

Session::flashPost();
redirect_to_homepage($url);

Μετά το redirect έχουμε πρόσβαση στα Posted dara ως εξής:

Session::get('posted_variable_key');

Με την function Errors() μπορούμε να περάσουμε στο Session τα validation errors ανά πεδίο και να τα εμφανίσουμε στο αντίστοιχο πεδίο στην φόρμα μας ως εξής:

Session::flashPost()->Errors($valitron_errors_array);
redirect_to_homepage($url);

Για να εμφανίσουμε το error μετά το redirect χρησιμοποιούμε την παρακάτω function:

Session::getError('posted_variables_key');

By default η css class που χρησιμοποιείται είναι η alert-danger (του bootstrap). Αν θέλουμε κάποια άλλη μπορούμε να την περάσουμε ως δεύτερη παράμετρο:

Session::getError('posted_variables_key', 'alert-warning');

Οι κλάσεις του boostrap που μπορούν να χρησιμοποιηθούν για τα messages είναι οι εξής: alert-success alert-info alert-warning alert-danger


Παραδειγμα Validation με Valitron και χρήση των Flash Data για την εμφάνιση μηνυμάτων και λαθών

if (isset($_POST['submitPoll'])) {
   $v = new Valitron\Validator($_POST);
    $v->rule('required', ['PollName','PollEndMessage']);
    $v->rule('alpha', ['PollName']);
    $v->labels(array(
        'PollName' => "$langTheField $langTitle",
        'PollEndMessage' => "$langTheField $langEndMessage",
    ));
    if($v->validate()) {
	//save to db
Session::( 'success', $langPollCreated);
Redirect_to_homepage($polls_list_url);
    } else {
             Session::flashPost()->Messages('Υπάρχουν λάθη στην φόρμα')->Errors($v->errors());
//Εναλλακτικά μπορούμε να εμφανίσουμε όλα τα μηνύματα λάθους στο πάνω μέρος της οθόνης
// Session::flashPost()->Messages($v->errors());

	Redirect_to_homepage($poll_creation_form_url);
    }
}

Για να κάνουμε repopulate την φόρμα μας μπορούμε να κάνουμε το παρακάτω.

$PollName = Session::has('PollName') ? Session::get('PollName') : '');

Τα validation errors που έχουμε περάσει στο session με την Errors() μπορούμε να τα εμφανίσουμε ως εξής:

            <div class='form-group ".(Session::getError('PollName') ? "has-error" : "")."'>
              <label for='PollName' class='col-sm-2 control-label'>$langTitle :</label>
              <div class='col-sm-10'>
                <input type='text' class='form-control' id='PollName' placeholder='$langTitle'>
                <span class='help-block'>".Session::getError('PollName')."</span>
              </div>
            </div>

Περισσότερα για το Valitron στο https://github.com/vlucas/valitron