Я борюсь с данными Flash в CodeIgniter.
Я в основном хочу:
добавьте категорию в базу данных, перенаправив пользователя назад на страницу, появится всплывающее сообщение о успехе «Ваша категория была создана»
Пока я могу успешно добавить категорию в db, и пользовательский ввод проверен правильно, только я не знаю, как создать сообщение об успешном всплытии. (Я не хочу загружать представление успеха), просто перенаправляй обратно туда, откуда они пришли, и покажите небольшое сообщение в верхнем углу или что-то в этом роде.
Являются ли данные флэш-памяти правильным способом?
В вашем контроллере:
//add to db // load session library if not auto-loaded $this->session->set_flashdata('msg', 'Category added'); redirect('controller/method');
В представлении:
<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>
Вы можете выполнять разные сеансовые сообщения, это зависит от того, что вы просматриваете с вашего контроллера. Отмечено, что я использую Bootstrap в качестве моей основы CSS.
Ввиду,
Для случая успеха,
<?php if ($this->session->flashdata('category_success')) { ?> <div class="alert alert-success"> <?= $this->session->flashdata('category_success') ?> </div> <?php } ?>
Для случая ошибки,
<?php if ($this->session->flashdata('category_error')) { ?> <div class="alert alert-danger"> <?= $this->session->flashdata('category_error') ?> </div> <?php } ?>
В контроллере,
Для случая успеха,
$this->session->set_flashdata('category_success', 'Success message.'); redirect("To your view");
Для случая ошибки,
$this->session->set_flashdata('category_error', 'Error message.'); redirect("To your view");
Для получения дополнительной информации вы можете посетить: http://www.codeigniter.com/userguide2/libraries/sessions.html
используя тернарный оператор:
Установка данных Flash:
$this->session->set_flashdata('insertproduct', 'Product added successfully'); $this->session->set_flashdata('deleteproduct','Delete added successfully');
Использование данных флэш-сессии:
<?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;?>
Да, просто проверьте, доступны ли данные флэш-памяти, если это так, покажите сообщение, если это не так, а затем не показывайте его. так просто.
ps, вы всегда должны делать перенаправление после запроса POST.
Во флэш-данных CodeIgniter используются переменные session
PHP
. Он помещает :old
в имя сеанса так, чтобы он длился только один вызов db. Это очень важная функция и цель – делать то, что вы хотите делать, поэтому да, это очень хороший способ обойти эти вещи.
Помните, если вы собираетесь использовать это, вы должны включить $this->session->library('session')
Если вы не знаете, как на самом деле использовать flash_data
я бы предложил прочитать документы, которые я ранее связывал.
$this->session->set_flashdata( 'category_success', 'Your category has been created' ); redirect(); //location echo $this->session->flashdata('category_success');
Вы можете попробовать это –
контроллер:
$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...');
Посмотреть:
<?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 } ?>