繁体   English   中英

在yii中声明全局变量并在控制器中使用它们

[英]declaring global variables in yii and use them in controller

我一直试图在yii中声明一个布尔值的全局变量,并在控制器中的不同动作函数中更改其值。 下面是我想要实现的一个例子。

在... / config / main.php我添加了以下数组:'params'=> array('login'=>'true',),

在... / protected / controller / 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?

你可以使用类变量来实现它,这是一个例子:

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

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

然后就可以使用它了

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

你写道你创建了变量$login = 'false'所以'false'有一个字符串。 并且它不是空字符串所以$ login == true。 只需将其更改为

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

更新:关于此功能,您可能应该使用静态字段创建帮助程序类:

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

在index.php中声明全局。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM