web-dev-qa-db-fra.com

Données Flash CodeIgniter

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?

13
Tom

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>
36
Mudshark

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

4
William Kheng

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">&times;</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">&times;</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">&times;</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">&times;</a>
            <strong>Info!</strong> <?php echo $this->session->flashdata('info'); ?>
        </div>
    <?php } ?>
1
Walk

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;?>
1
saurabh kamble
//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; ?>
0
erickie007

CodeIgniter's données Flash utilise les variables PHPsession. 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');
0
Phil

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.

0
hndr