Je suis aux prises avec des données Flash dans CodeIgniter.
Je veux essentiellement:
ajouter une catégorie à une base de données rediriger l'utilisateur vers une pageafficher un message contextuel indiquant que l'opération a abouti "Votre catégorie a été créée"
Jusqu'à présent, je peux ajouter la catégorie à la base de données avec succès et l'entrée utilisateur est correctement validée. Le seul problème, c'est que je ne sais pas comment créer le message de succès contextuel. (Je ne veux pas charger une vue de réussite), il suffit de rediriger vers leur lieu d'origine et d'afficher un petit message dans le coin supérieur ou quelque chose du genre.
Les données flash sont-elles la bonne solution?
Dans votre contrôleur:
//add to db
// load session library if not auto-loaded
$this->session->set_flashdata('msg', 'Category added');
redirect('controller/method');
Dans la vue:
<script>
// assumes you're using jQuery
$(document).ready(function() {
$('.confirm-div').hide();
<?php if($this->session->flashdata('msg')){ ?>
$('.confirm-div').html('<?php echo $this->session->flashdata('msg'); ?>').show();
<?php } ?>
});
</script>
Le message que vous pouvez utiliser pour une session différente dépend de ce que vous transmettez à votre contrôleur. A noté que j'utilise Bootstrap comme ma dorsale CSS.
En vue,
Pour le cas de réussite,
<?php if ($this->session->flashdata('category_success')) { ?>
<div class="alert alert-success"> <?= $this->session->flashdata('category_success') ?> </div>
<?php } ?>
Pour le cas d'erreur,
<?php if ($this->session->flashdata('category_error')) { ?>
<div class="alert alert-danger"> <?= $this->session->flashdata('category_error') ?> </div>
<?php } ?>
Dans le contrôleur,
Pour le cas de réussite,
$this->session->set_flashdata('category_success', 'Success message.');
redirect("To your view");
Pour le cas d'erreur,
$this->session->set_flashdata('category_error', 'Error message.');
redirect("To your view");
Pour plus de référence, vous pouvez visiter: http://www.codeigniter.com/userguide2/libraries/sessions.html
Vous pouvez essayer ceci -
Manette:
$this->session->set_flashdata('success', 'Success Message...');
OR
$this->session->set_flashdata('error', 'Error Message...');
OR
$this->session->set_flashdata('warning', 'Warning Message...');
OR
$this->session->set_flashdata('info', 'Info Message...');
Vue:
<?php if($this->session->flashdata('success')){ ?>
<div class="alert alert-success">
<a href="#" class="close" data-dismiss="alert">×</a>
<strong>Success!</strong> <?php echo $this->session->flashdata('success'); ?>
</div>
<?php } else if($this->session->flashdata('error')){ ?>
<div class="alert alert-danger">
<a href="#" class="close" data-dismiss="alert">×</a>
<strong>Error!</strong> <?php echo $this->session->flashdata('error'); ?>
</div>
<?php } else if($this->session->flashdata('warning')){ ?>
<div class="alert alert-warning">
<a href="#" class="close" data-dismiss="alert">×</a>
<strong>Warning!</strong> <?php echo $this->session->flashdata('warning'); ?>
</div>
<?php } else if($this->session->flashdata('info')){ ?>
<div class="alert alert-info">
<a href="#" class="close" data-dismiss="alert">×</a>
<strong>Info!</strong> <?php echo $this->session->flashdata('info'); ?>
</div>
<?php } ?>
en utilisant l'opérateur ternaire:
Réglage des données Flash:
$this->session->set_flashdata('insertproduct', 'Product added successfully');
$this->session->set_flashdata('deleteproduct','Delete added successfully');
Utilisation des données de session Flash:
<?php if($this->session->flashdata('insertproduct')):echo $this->session->flashdata('insert');endif; ?><br/>
<?php if($this->session->flashdata('delete')): echo $this->session->flashdata('delete'); endif;?>
//Set Flash messages
$this->session->set_flashdata('post_created', 'Your post has been Posted!');
redirect('Posts/index');
//In Posts View you will have
<?php if($this->session->flashdata('post_created')) : ?>
<?php echo '<p class="alert alert-success"> ' .$this->session->flashdata('post_created'). '</p>'; ?>
<?php endif; ?>
CodeIgniter's données Flash utilise les variables PHP
session
. Il place un :old
dans le nom de la session afin qu'il ne dure qu'un appel de base de données. Son objectif principal est de faire ce que vous voulez faire, alors oui, c’est une très bonne façon d’agir dans ce genre de choses.
Rappelez-vous que si vous allez utiliser ceci, vous devez inclure $this->session->library('session')
Si vous ne savez pas vraiment comment utiliser flash_data
, je vous suggère de lire les documents que j'ai précédemment associés.
$this->session->set_flashdata(
'category_success',
'Your category has been created'
);
redirect(); //location
echo $this->session->flashdata('category_success');
Oui, il suffit de vérifier si les données flash sont disponibles, si elles le sont, affichez le message, si ce n'est pas le cas, alors ne le montrez pas aussi simple que cela.
p.s. vous devriez toujours faire une redirection après une demande POST.