【问题标题】:Set and get global variable in php (ZendFramework)在 php (ZendFramework) 中设置和获取全局变量
【发布时间】:2011-11-20 11:12:07
【问题描述】:

我将 ZendFramework 与 PHP 一起使用,我想设置和获取一个变量作为全局变量。 IE。我将它设置在 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->EMAIL 获取私有变量,但无法访问它

【问题讨论】:

  • 除了非常有限的情况外,通常应该避免使用全局变量(太长而无法进入评论...)。相反,也许您应该参考前端控制器来获取数据。 (虽然不知道你的确切情况,我可能会给你不好的建议。)
  • @Corbin...我修改并简要描述了我的问题。请检查并帮助我

标签: php zend-framework


【解决方案1】:

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

你可以这样设置变量

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

以后可以这样弄

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

【讨论】:

  • Thanx buddy.... 这是一个不错的选择,但我遇到了一个问题,即我在 init() 中使用 ::set('email' false) 初始化注册表并再次在其他中声明它我用 ajax 作为 ::set('email', true) 调用的操作,然后在第三个函数中将其检查为 true 或 false,并且每次我得到 false 时。有没有其他选择可以做同样的事情
  • 我不确定它是否会让你的生活变得轻松,但你可以在注册表中传递一个配置对象,它只处理配置选项的子集?
  • 你提到的关于 Zend_Registry 的链接失效了
【解决方案2】:

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

在我看来,您可以:

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

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

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

【讨论】:

    【解决方案3】:

    您还可以使用函数来设置和获取值。

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

    【讨论】:

    • 这是访问类中的变量。但我想从不同的控制器和模型中访问变量。就像催化剂框架中的催化剂对象
    猜你喜欢
    • 2020-02-15
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    相关资源
    最近更新 更多