2013-12-13 21 views
0

我正在学习Yii,我想问一个基本问题。 我有一个控制器,并且有在控制两个动作,内容如下如何在yii中创建全局变量

class MyappController extends Controller 
{ 
public $count=0; 

public function actionInitialCount() 
{ 
$this->count=1; 
$this->redirect('secondCount'); 
} 

public function actionSecondCount() 
{ 
echo $this->count; 
} 

} 

现在我想的是,当InitialCount行动已经修改了$计数变量1. secondCount来呼应它as 1 and not 0。但它只能作为0回响。那么,如何实现这一任务,如果一个动作修改一个变量的话,我可以在第二个动作

+0

我想你已经在“params”变量中使用了。我不确定这一点。 –

回答

1

我认为,您正在考虑两个应用程序生命周期之间的公共变量。这只适用于$ _SESSION或其他持久变量。我希望你明白这一点。

1

在侧面得到修正值控制器功能,你必须使用计数变量

$这 - >计数

所以,完整的代码将是:

类MyappController扩展控制器{

public $ count = 0;

公共函数actionInitialCount()

{

$这 - >重定向( 'secondCount');

}

公共函数actionSecondCount()

{

回声$这 - >计数;

}

}

+0

谢谢,但它不是解决方案bro –

+0

好的。更改$ this-> redirect('secondCount');到$ this-> actionSecondCount();让我知道它是否工作。我需要更新答案。 –

1

认为我有一个类

class AController extends MyController{ 
    //can be accessed here(even in the view) using $this->publicvariable 
} 

我说,这是在组件

class MyController extends CController{ 
    //My public variable is declared here 
} 
1

现在我采取不同的例子。

示例1

这是一个简单的PHP程序示例。

class MyappController { 

    public $count = 0; 

    function InitialCount() { 
     $this->count = 1; 
    } 

    function SecondCount() { 
     print $this->count; 
    } 
} 

$ob = new MyappController(); 
$ob->InitialCount(); 
$ob->SecondCount(); 

实施例2

上面相同的程序,但在Yii中。

class MyappController extends Controller 
{ 
    public $count=0; 

    function __construct() { 
     $this->count = 7 + 8 ; 
    } 


    public function actionIndex() 
    { 
     echo $this->count ; 

    } 

    public function actionInitialCount() 
    { 
     echo $this->count=1; 
    } 

    public function actionSecondCount() 
    { 
     echo $this->count ; 
    } 
} 

实施例3

我们可以通过访问它侧的类改变值。

class MyTest 
{ 
    protected $a; 

    public function __construct($a) 
    { 
     $this->a = $a; 
    } 

    public function head() 
    { 
     echo $this->a; 
    } 

    public function footer() 
    { 
     echo $this->a; 
    } 
} 

$a = 7; 
$obj = new MyTest($a); 

echo $obj->head(); 

其实当你修改了变量值,那么你需要声明它,正如我在第一个例子已经声明,那么你就可以得到你的变化值。其次,就像在电子商务应用程序中一样,当我们购买不同的项目时,它们每个都会显示修改后的值,因此可以通过会话变量来访问它,这些变量将信息存储在服务器上。 如果您在Yii中需要修改的值并将其显示在视图中,那么您可以阅读Yii Sessions,然后完成您的需求。 在Yii的例子中,如果你将它重定向到视图,那么它会产生错误,因为我已经构造了构造函数。

希望它能帮助你理解。

谢谢。

1

你不能只使用Yii :: app() - > session ['count']来计算会话吗?现在发生的事情是,当你调用actionInitialCount并再次调用actionSecondCount时,该类将被加载,因此$ count将被设置为0.

+0

+1其实我只用会话做过。但因为我是一个新手,所以我想知道如果没有会议也可以发生:) –

+0

不,我不相信这是可能的。 http://www.larryullman.com/2011/05/03/using-sessions-with-the-yii-framework/。这里有一篇关于使用Yii会话的不错文章。我建议使用Yii :: app() - > session []而不是$ _SESSION(如果你没有这样做)。就像拉里乌尔曼说的那样,“使用框架来最大限度地利用框架是最好的”。他的博客和书籍是关于Yii的很好的信息来源! – Jeroen