Flash Data and Validation¶
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
Updated by Yannis Exidaridis about 4 years ago · 12 revisions