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