Kohana Redirect в Kohana 3.3 на текущую страницу

Lobezki

Новичок
Необходим редирект на страницу с которой была произведена авторизация. Напр. юзер зашел на стр. раздела файлов, и его естественно сразу же перекидывает на страницу авторизации. Необходимо, что бы при авторизации юзера снова же перенаправляло в раздел файлов или на любую др страницу с кот. его перенаправило на авторизацию. Я создал отдельный контроллер отвечающий за авторизацию юзеров.

Стоит Kohana 3.3.
Написал:
...
if (isset ($_POST['btnsubmit']))
{
$login = Arr::get($_POST, 'login', '');
$password = Arr::get($_POST, 'password', '');

if ($auth->login($login, $password))
{
$session = Session::instance();
$auth_redirect = $session->get('auth_redirect','');
$session->delete('auth_redirect');

Controller::redirect($uri='');
}
else
{
$data['error'] = "";
}
}
...

Знаю, что в предыдущих версиях kohana вместо Controller::redirect($uri=''); было: Request::initial()->redirect('');

Я так понимаю, что в строке Controller::redirect($uri=''); в скобках ($uri='') необходимо что-то прописать дополнительно? Только что?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Знаю, что в предыдущих версиях kohana вместо Controller::redirect($uri=''); было: Request::initial()->redirect('');
Оно и сейчас есть, и как и в старых версиях, нужно для совершенно другого.

Нужно сохранить предыдущий урл перед редиректом на авторизацию куда нибудь, и после успешного логина, редиректить туда.
 

Lobezki

Новичок
флоппик, но ведь сохранением и подстановкой занимается
$session = Session::instance();
$auth_redirect = $session->get('auth_redirect','');
$session->delete('auth_redirect');

И вообще извините, я не совсем точн оукзал мою проблему. Скрипт работает, но он подставляет урл неправильно. Если в bootstrap.php пишу:

Kohana::init(array(
'base_url' => '/kohana', (или '/kohana/')
'index_file' => ''
));

то меня редиректит на locahost/kohana/kohana/page (допустим я пытался зайти на стр. page будучи неавторизированным) и кохана пишет, что не может найти такую страницу в корне коханы

а если пишу:

Kohana::init(array(
'base_url' => '/',
'index_file' => ''
));

то меня редиректит на locahost/page и уже не кохана, а просто в браузере написано, что страница не найдена

Т.е. если в 1м случае избавитсья от дубляжа kohana/ в адресе, то всё будет норм.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Ну так у тебя проблема значит с сохранением или определением текущего урла. Как ты его получаешь и сохраняешь - ты же не показал.

Кстати, вместо Controller::redirect() лучше делать $this->redirect()
 

Lobezki

Новичок
Как ты его получаешь и сохраняешь - ты же не показал.
Дело в том, что я только начинаю изучать php. И новичок в этом деле. Не могли бы мне подсказать, как это реализовать?

Кстати, вместо Controller::redirect() лучше делать $this->redirect()
Спасибо, заменю!
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Нет, я вижу, что ты берешь из сессии auth_redirect - а как ты его туда ложил?
 

Lobezki

Новичок
флоппик, дело в том, что делаю по видеоуроку. И у человека всё работает. Сайт делает с нуля. Все настройки и изменения фреймвёрка показывает онлайн, как говорится. Единственное отличие это - у него кохана 3.0 или меньше даже. У меня же последняя 3.3.1.
 

Lobezki

Новичок
У меня за запоминание отвечает отдельный контроллер.

class Mycontroller extends Controller_Template {

public function before()
{
$session = Session::instance();
$session->set('auth_redirect', $_SERVER['REQUEST_URI']);

$auth = Auth::instance();
if ($auth->logged_in() == 0) Controller::redirect($uri ='auth');
return parent::before();
}
 

флоппик

promotor fidei
Команда форума
Партнер клуба
ну вот, уже лучше. Только тебе надо запоминать не $_SERVER['REQUEST_URI'] - а как раз-таки Request::initial()->uri()
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Говоря конкретно про меня, у меня два раздельных контроллера, от которого наследуются дальше контроллеры разделов: Controller_Public - в котором нет проверок на залогиненность, и Controller_Authorized - в котором они есть. Оба наследуются от Controller_Core - который хранит общие плюшки для них.
 
Сверху