Amritpal singh
Amritpal singh

Reputation: 865

Set and get global variable in php (ZendFramework)

I am using ZendFramework with PHP, and I want to set and get a variable as a global variable. I.E. I set it in the class of Zend Controller and access it any action in the class.

For example:

<?php

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

First I am validating email addres with ajax call

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

then I want subscribe user on the basis of private variable again with ajax call

    public function subscribeAction
    {
      if($EMAIL == true)
       {
         //some stuff 
       }        
    }

I am getting private var by $this->EMAIL, but not able to access it

Upvotes: 2

Views: 11910

Answers (3)

Anil Kumar
Anil Kumar

Reputation: 1

You can also used a function for set and get a value.

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

// Getter function

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

Upvotes: 0

David Weinraub
David Weinraub

Reputation: 14184

Looks to me like you are making two distinct requests calling, respectively, checkusernameAction() and subscribeAction(). Since these are distinct requests, the email value you set in the controller during checkusernameAction() will be gone on the second request which calls subscribeAction(). It's the same controller class, but you are looking at two distinct instances, one in each request.

As I see it, you can either:

  1. Pass the email address in each AJAX request, but this seems unlikely since you get the email address from the first call to checkusernameAction().

  2. Save the email in the session during the first checkusernameAction() call and then pick it up during the second subscribeAction() call.

  3. Extract the "get email from username" code into a separate class or method and then call it in both places. After all, you don't want to get bitten by a "race condition" in which the state of the system changes between the two AJAX requests (maybe the user's email changes via some other process or via another set of requests that occur after the first AJAX request containing the call to checkusernameAction().

Upvotes: 0

Shakti Singh
Shakti Singh

Reputation: 86406

You can use Zend_Registry to use the variable throughout application.

You can set a variable like this

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

and later can get it like this

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

Upvotes: 6

Related Questions