Здравствуйте. Подскажите, как можно сделать переход на страницу регистрации только по ссылке с другой страницы. То есть по прямому url /greate-account страница не будет доступна, только со страницы /confirm . Пытался сделать через сессию, но что то не получается. Есть примеры которые подключаются на самой страницы, но в нашем случае сессия открывается в корне из index.php . Пробовал добавлять проверку в контроллере, выпадает с ошибкой.
Ну тут можно использовать HTTP_REFERER из $_SERVER. Правда не все браузеры разрешают его посмотреть. Еще как вариант, передавать в GET определенный параметр. И при в контроллере на нужной странице проверять его наличие.
Нет не сессию, а параметр. После public function index() { добавить Код: if (!isset($this->request->get('allow')) || $this->request->get('allow') !== 'true') { $this->redirect($this->url->link('error/not_found')); } И тогда переход на эту страницу возможен только если в ссылке есть параметр allow=true (/greate-account?allow=true)
А если делать по HTTP_REFERER, что нужно указывать в таком коде? Код: if($_SERVER['HTTP_REFERER'] == 'http://mysite/index.php?route=account/confirm') { header('location: http://mysite/index.php?route=account/register'); } else { header('location: http://mysite/'); } В данном случае прямой переход по урл запрещен, происходит редирект на главную, а вот при переходе с рефера получаем бесконечный цикл :((
Если вы прописываете это в контроллере регистрации, то все правильно. Выходит если у вас реферер при переходе на странице регистрации http://mysite/index.php?route=account/confirm , то вы опять направляете на страницу регистрации. Тоесть у вас все время один и тот же реферер и переход на одну и ту же страницу. Код: if($_SERVER['HTTP_REFERER'] != 'http://mysite/index.php?route=account/confirm') { header('location: http://mysite/'); } Исправьте код на такой.
Спасибо. Но почему то в контроллере не хочет работать. Ругается то на неопеределенный индекс, то еще на что нибудь. Вставил в шаблон, все работает.
Отлично работает при вставке в шаблон перед <?php echo $header;?> в таком виде <?php if($_SERVER['HTTP_REFERER'] !== 'http://mysite/страница откуда пришли') { header('location: http://mysite/'); } ?> Когда в контроллере в public function index() Notice: Undefined index: HTTP_REFERER in
В ОК сбрасываются глобальные переменные запроса после переноса их содержимого в класс Request. Вместо $_SERVER['HTTP_REFERER'] используйте: PHP: $this->request->server['HTTP_REFERER']