объявление глобальных переменных в 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 ответа:
Для этого можно использовать переменные класса, вот пример:
<?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; }