объявление глобальных переменных в yii и использование их в контроллере


Я пытался объявить глобальную переменную в yii, которая является булевой, и изменить ее значение в различных функциях действия в контроллере. Ниже приведен пример того, чего я пытаюсь достичь.

В.../ config / main.php я добавил следующий массив: 'params'= > array ('login' = > 'true',),

В.../ защищенный / контроллер / testController.php я добавил следующий код:

<?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
}

Как я могу достичь этого без необходимости присваивать значение в каждой функции глобальная переменная? Если я вызываю вторую функцию, она выдает ошибку, что x не определен. Мой план состоит в том, чтобы использовать глобальную переменную так, как вы это делаете в java, например

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?
4 5

4 ответа:

Для этого можно использовать переменные класса, вот пример:

<?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;
    }
}

Вы можете сделать статическими системными переменными, вот руководство по этому

В основном в config/main.php вы должны добавить

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

Тогда вы можете использовать его как

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

Вы написали, что создали переменную $login = 'false', поэтому "false" есть строка. И это не пустая строка, так что $login = = true. Просто измените его на

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

Update: об этой функции, возможно, вам следует создать вспомогательный класс со статическим полем:

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

Объявить глобальный указатель.РНР.