Как обрабатывать перенаправления с помощью codeigniter? - PullRequest
1 голос
/ 19 марта 2010

У меня проблемы с запуском проекта codeigniter, проблема в том, что когда я делаю что-то в контроллере, а затем хочу, чтобы на странице отображался результат, пример: у меня есть форма для добавления элемента в базу данных, я получаю все данные в контроллере и сохранить их в базе данных, а затем я хочу (если все прошло хорошо), чтобы перенаправить на главную страницу с сообщением об успехе, я делал это с

$this->load->view('admin', $data);

проблема в том, что URL продолжает говорить admin / addItem, поэтому каждый раз, когда страница обновляется, он добавляет другой элемент, теперь я нашел:

redirect('admin','refresh');

, но это помогает только тогда, когда мне не нужно отображать какие-либо сообщения, потому что эта функция не позволяет отправлять переменную $ data. Есть идеи? Возможно, это действительно легко исправить, но я не могу найти способ обработать поток приложения так, как я хочу, любая помощь приветствуется. спасибо;)

Ответы [ 3 ]

3 голосов
/ 20 марта 2010

Flashdata - ваш друг, перейдите по этой ссылке, и примерно посередине страницы вы найдете документы для flashdata.

В основном, если ваши функции формы успешны, вы устанавливаете flashdata с вашим сообщением об успехе, $this->session->set_flashdata('success', 'You successfully did something, yay!'); Теперь перенаправьте на свою страницу администратора. redirect('admin','refresh'); на странице администратора проверьте наличие flashdata и отправьте его пользователю

1 голос
/ 19 марта 2010

Может быть легко исправить или это также может быть трудно исправить, посмотрите документацию о URI-маршрутизации http://codeigniter.com/user_guide/general/routing.html

В моем тестовом приложении я использую эту переменную

$route['default_controller'] = "main";
$route['scaffolding_trigger'] = "";

main - это контроллер, поэтому, если вы заходите на сайт, сначала вызывается контроллер main

в вашем случае я бы использовал что-то вроде этого

$route['admin/:num'] = "catalog/products"; 

Это перенаправит любой доступ к admin / * в каталог / продукты

Будь креативным; -)

0 голосов
/ 20 марта 2010

Я думаю, что вместо этого вы должны использовать этот подход:

вместо того, чтобы вызывать представление администратора или перенаправлять заголовок, вы должны отправить сообщение из формы прямо в функцию admin, внутри функции admin, если переменная $ _POST не пуста, означает, что вы должны сохранить данные в вызове базы данных другая функция в том же контроллере или в одном примере модели: ($ this-> save_data_in_database ();) и отправьте результат этого в представление снова. Если переменная $ _POST пуста, вы должны вызвать представление администратора и отправить данные для сообщения как NULL.

Я отправляю один пример ниже:

Просмотр администратора: (сообщение непосредственно в функцию администратора в контроллере)

<html>
(...)
<body>

<?php echo $message_response; ?>

<form method="post" action="<domain>/index.php/admin" />
   <imput (...)     
</form>

</html>

Контроллер:

function admin() 
{
   if (isset($_POST['fieldname']))
        $data['message_response']=$this->save_data_in_database($params...);
   else
        $data['message_response']=NULL;       

  $this->load->view('admin', $data);  
}


function save_data_in_database($params...)
{

(save data to database etc...)

return (...message_to_display...);

}

С наилучшими пожеланиями,
Pedro

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...