Frage

I have been trying to declare a global variable in yii that is a boolean, and have its value changed in different action functions in the controller. Below is an example of what i am trying to achieve.

in .../config/main.php i added the following array: 'params'=>array('login' => 'true',),

in .../protected/controller/testController.php i added the following code:

<?php
    class ApiController extends Controller{
public $x = '';

public function actionDisplay(){
$x=Yii::app()->params['login']; //so x now has the value "true"
echo $x; //this display "true" when i run this controller on this function
}

public function actionDisplay2(){
global $x;
    echo $x; //this for some reason does not contain the value true even if x is global
}

How can i achieve this without having to assign a value in each function to the global variable? If i call the second function, it throws an error that x is not defined. My plan is to use the global variable the way you do in java e.g.

public class Display{

public String x = " ";

public static void Display(){
x = "True"; //global variable x is assigned the String value "True"
}

public static void DisplayTwo(){
System.out.print("Value of x is: " + x); //this will print "Value of x is: True"
}

....

}
So basically, this is how i want to use the global variable in Yii framework. Any suggestions how to achieve this please?
War es hilfreich?

Lösung

You can use the class variables to achieve that, here's an example:

<?php

class ApiController extends Controller
{
    public $lang = 'en';

    public function beforeAction($action)
    {
        if(Yii::app()->session->contains('lang'))
            $this->lang = Yii::app()->session['lang'];
        return parent::beforeAction($action);
    }

    public function afterAction($action,$params)
    {
        Yii::app()->session['lang'] = $this->lang;
        return parent::afterAction($action,$params);
    }

    public function actionDisplay(){
        echo 'In Display action';
        $this->lang = 'test'
        echo $this->lang;
    }

    public function actionDisplay2(){
        echo 'In Display2 action';
        echo $this->lang;
    }
}

Andere Tipps

you can make static system variables, here is a guide on that

basicaly in config/main.php you have to add

...
'params' => array(
    'email'      => 'steve@unixwiz.net',
    'someOption' => true
),
...

then you can use it like

$email = Yii::app()->params['email'];

You wrote that you created variable $login = 'false' So 'false' there is a string. And it's not empty string so $login == true. Just change it to

'params'=>array('login' => false),

Update: About this feature, maybe you should to create helper class with static field:

class SomeHelper
{
     //that field can be changed and used in any place
     public $static $login = false;
}

Declare the global in index.php.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top