Хорошо это не действительно проблема, но я проверяю, существует ли пользователь и регистрирует их в и перенаправление к site/members_area, но я не хочу отправлять пользователя в определенную страницу, но я хочу перезагрузить текущий контроллер. Таким образом, если бы я вхожу в систему в индексе/доме, я хотел бы быть перенаправленным в индексе/доме, как я должен продолжить двигаться?
в регулярном php я вставил бы действие для перенаправления к текущей странице
<?php echo $_SERVER['PHP_SELF']; ?>
Это - код в платформе
function validate_credentials()
{
$this->load->model('membership_model');
$query = $this->membership_model->validate();
if($query) // if the user's credentials validated...
{
$data = array(
'username' => $this->input->post('username'),
'is_logged_in' => true
);
$this->session->set_userdata($data);
redirect('site/members_area'); //<-- this line here should be dynamic
}
else // incorrect username or password
{
$this->index();
}
}
Я сам решил эту проблему, разместив в заголовке форму входа, которая всегда отправляется одному контроллеру входа, но загвоздка в том, что форма входа в заголовок (которая появляется на каждой странице) всегда имеет скрытый ввод, называемый перенаправлением, который фиксирует фактический контроллер входа в систему ...
Вот базовая настройка (убедитесь, что вспомогательный URL-адрес загружен):
Заголовочная форма входа в систему
<form action="/login" method="post">
<input type="hidden" name="redirect" value="<?php echo current_url(); ?>" />
<input type="text" name="username" value="" />
<input type="password" name="password" value="" />
<input type="submit" name="login" value="Login" id="submit">
</form>
Форма контроллера входа
<form id="login" action="" method="post">
<input type="text" name="username" id="username" value="" />
<input type="password" name="password" id="password" value=""/>
<?php if(isset($_POST['redirect'])) : ?>
<input type="hidden" name="redirect" value="<?php echo $_POST['redirect']; ?>" />
<?php endif; ?>
<input type="submit" name="login" id="submit" value="Login" />
</form>
Самое приятное то, что вы продолжаете устанавливать перенаправление при сбое, и ввод перенаправления устанавливается только в том случае, если вы входите в систему из другого места.
Контроллер
function index()
{
if( ! $this->form_validation->run())
{
// do your error handling thing
}
else
{
// log the user in, then redirect accordingly
$this->_redirect();
}
}
function _redirect()
{
// Is there a redirect to handle?
if( ! isset($_POST['redirect']))
{
redirect("site/members_area", "location");
return;
}
// Basic check to make sure we aren't redirecting to the login page
// current_url would be your login controller
if($_POST['redirect'] === current_url())
{
redirect("site/members_area", "location");
return;
}
redirect($_POST['redirect'], "location");
}
Здесь происходит следующее:
Это просто базовый пример. Очевидно, вы можете настроить его по мере необходимости.
Вы можете сделать это вот так. Не забудьте загрузить библиотеку сеанса и помощник по URL.
$this->session->set_flashdata('redirectToCurrent', current_url());
Передайте указанные выше флэш-данные вместе с логином и перенаправлением, используя:
redirect($this->session->flashdata('redirectToCurrent'));
Я уверен, что есть способ получше, но я это делаю, когда не удается проверить, вошел ли пользователь в систему, я использую $ this-> session-> set_flashdata ('redirect_url', current_url ());
, а затем передать его вместе с формой входа, чтобы я знал, куда перенаправить пользователя обратно.
Как я уже сказал, я уверен, что есть более чистый способ сделать это, но мне определенно не нравится $ _ SERVER ['HTTP_REFERER'];
, поскольку ему нельзя доверять.