CakePHP等待警报接受

时间:2012-12-05 07:26:17

标签: php function cakephp

我有一个用户注册页面,可以为游戏启动第三方脚本,我只希望这个页面在用户接受权限时完成加载(它将设置一个HTTP变量)。我目前已经提示允许但是在后台加载页面,我将如何“等待”或“重新加载”页面以重新检查此变量是否已设置?

添加的控制器功能

public function add() {
    if ($this->User->IGBRequireTrust()) {
        if ($this->request->is('post')) {
            $this->User->create();
            if ($this->User->save($this->request->data)) {
                $this->Session->setFlash(__('The user has been saved'));
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('The user could not be saved. Please, try again.'));
            }
        }
    }
}

上面调用的Model中的公共函数

// Returns TRUE if the user trusts the site, FALSE otherwise.
    public function IGBRequireTrust()
    {
        if($_SERVER['HTTP_EVE_TRUSTED'] != 'yes')
        {
            echo "<script>CCPEVE.requestTrust('http://*.".$_SERVER['HTTP_HOST']."');</script>";
        }
        return true;
    }

如果页面不接受权限,则需要使用会话flash msg设置重定向回索引函数。我尝试在其中调用IGBRequireTrust函数的地方添加一个else,但它似乎总是这两个。

更新:

AppController功能

public function beforeFilter(){     $ this-&gt; Auth-&gt; allow('index','view');

if($this->name == 'Users' && $this->action == 'add'){
    //die('correct controller and action');
    if(isset($_SERVER['HTTP_EVE_TRUSTED'])){
        if($_SERVER['HTTP_EVE_TRUSTED'] != 'yes' && $this->action != 'promptEveTrusted'){
            $this->redirect(array('controller'=>'Users', 'action'=>'promptEveTrusted'));
        }
    } else {
        $this->Session->setFlash(__('Registration is only allowed through the EVE in game browser.'));
        $this->redirect(array('controller'=>'Users', 'action'=>'index'));
    }
//} else {
  //  die('wrong controller and action');
}

}

2 个答案:

答案 0 :(得分:0)

看起来你正在向页面中注入javascript,直到所有php代码之后才会呈现。也许尝试使用javascript作为你的逻辑。或者jquery会非常简单。此外,$this->User->IGBRequireTrust()始终返回true。在if语句中输入false

// Returns TRUE if the user trusts the site, FALSE otherwise.
    public function IGBRequireTrust()
    {
        if($_SERVER['HTTP_EVE_TRUSTED'] != 'yes')
        {
            echo "<script>CCPEVE.requestTrust('http://*.".$_SERVER['HTTP_HOST']."');</script>";
            return false;
        }
        return true;
    }

<script>
var eve_trusted = '<?php echo $_SERVER['HTTP_EVE_TRUSTED']; ?>';
var declined_eve_url = '<?php echo $this->webroot; ?>users/unauthorized';
//Might have to wait for your script injection to load so we will wait for document ready
$(function(){
    if(!eve_trusted) window.location.href = declined_eve_url;
});
</script>

在这里,我将为您提供使用js取消页面加载的帮助,但是,我不确定您的主脚本将加载的顺序。

或者,您可以通过将您的逻辑放在AppController.ctp的beforeFilter中来清理所有这些内容

function beforeFilter(){
    if($_SERVER['HTTP_EVE_TRUSTED'] != 'yes' && $this->action != 'promptEveTrusted')
        $this->redirect(array('controller'=>'User', 'action'=>'promptEveTrusted'));
}

//USERS CONTROLLER
function promptEveTrusted(){
    //This will give the user a blank template, comment if you don't wish this
    $this->layout = 'ajax';
}
//views / users / prompt_eve_trusted.ctp
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>

<script>
  $(function(){
     CCPEVE.requestTrust('http://*.".$_SERVER['HTTP_HOST']."');
  });
 </script>

答案 1 :(得分:0)

我会加载没有http变量的页面,只会显示一条消息(例如,通过javascript)。

如果用户接受了它,则javascript会将其重定向到带有变量的同一页面,然后在设置变量时将加载所需的所有内容。

如果他不接受,它会保留在同一页面中,或者根据您的喜好将其重定向到另一个页面。