在php中设置并获取全局变量(ZendFramework)

时间:2011-11-20 11:12:08

标签: php zend-framework

我在PHP中使用ZendFramework,我想设置并获取一个变量作为全局变量。 I.E.我在Zend Controller的类中设置它并在类中访问它。

例如:

<?php

class SubscriptionController extends Zend_Controller_Action
{
    private $EMAIL = false;
    private $USERNAME = false;

首先,我使用ajax调用验证电子邮件地址

    public function checkusernameAction()
    {
        $email = //query to find email;     
        if($email){
        $EMAIL = true;
        }else{
        $EMAIL = false;
        }
    }

然后我希望再次使用ajax调用

在私有变量的基础上订阅用户
    public function subscribeAction
    {
      if($EMAIL == true)
       {
         //some stuff 
       }        
    }

我通过$ this-&gt; EMAIL获取私有var,但无法访问它

3 个答案:

答案 0 :(得分:6)

您可以使用Zend_Registry在整个应用程序中使用变量。

您可以像这样设置一个变量

Zend_Registry::set('email', $EMAIL);

以后可以像这样得到它

$email= Zend_Registry::get('email');

答案 1 :(得分:0)

在我看来,您正在分别拨打两个不同的请求checkusernameAction()subscribeAction()。由于这些是不同的请求,因此您在checkusernameAction()期间在控制器中设置的电子邮件值将在调用subscribeAction()的第二个请求中消失。它是相同的控制器,但您正在查看两个不同的实例,每个请求中都有一个。

在我看来,你可以:

  1. 在每个AJAX请求中传递电子邮件地址,但这似乎不太可能,因为您在第一次调用checkusernameAction()时收到了电子邮件地址。

  2. 在第一次checkusernameAction()来电期间将电子邮件保存在会话中,然后在第二次subscribeAction()来电期间将其提取。

  3. 将“从用户名获取电子邮件”代码解压缩到单独的类或方法中,然后在两个位置调用它。毕竟,你不希望被“竞争条件”所困扰,在这种“竞争条件”中,系统状态在两个AJAX请求之间发生变化(可能是用户的电子邮件通过其他进程或通过其他一组请求发生的更改)第一个包含对checkusernameAction()的调用的AJAX请求。

答案 2 :(得分:0)

您还可以使用函数进行设置并获取值。

// Setter function
public function setConsumerKey($key)
{
    $this->_consumerKey = $key;
    return $this;
}

// Getter function

public function getConsumerKey()
{
    return $this->_consumerKey;
}