Цикл перенаправления в CakePHP - PullRequest
1 голос
/ 22 июня 2011

Я работаю над приложением CakePHP. Я пытаюсь перенаправить пользователя на адрес администратора на основе его / ее IP-адреса, и для этого я использую этот код в app_controller.php

        if(env('REMOTE_ADDR')=='foo') {

        $this->redirect(array('action'=>'index', 'admin'=>1));
        echo $html->link(__('Logout', true), array('controller'=> 'users', 'action'=>'admin_index')); 
        }

Я получаю цикл перенаправления, как только условие совпадает. (

1 Ответ

5 голосов
/ 22 июня 2011

Это потому, что ваш контроллер приложения запускает код раньше всего. Код, который вы написали, по существу переводит на

  1. Посетите URL => AppController срабатывает, отправляет вас в / admin / controller / index /
  2. В / admin / controller / index / AppController снова запускается и отправляет вас в / admin / controller / index /
  3. Как указано выше

Еще одна вещь, вы, кажется, повторяете ссылку после того, как делаете переадресацию, это не имеет смысла.

Что вы, вероятно, хотите, что-то вроде этого

$url = 'Wherever you are redirecting to';
if (env('REMOTE_ADDR') == 'foo' && $this->params['url']['url'] != $url) {
   $this->redirect($url);
}

Кроме того, когда вы делаете $this->redirect(array('action'=>'index', 'admin'=>1));, вы по существу перенаправляете на действие index любого URL-адреса, на котором находитесь. Это то, что вы пытаетесь сделать? Если это так, вам нужно изменить чек на что-то вроде

$url = 'Wherever you are redirecting to';
if (env('REMOTE_ADDR') == 'foo' && $this->params['action'] != 'index' && $this->params['admin'] != 1) {
   $this->redirect($url);
}
...