假设您在每个页面请求中显示一个随机语句,并使用一个函数返回一个随机对象,例如:
Statement::get()->sort("RAND()")->limit("1");
但是现在在模板中,您想在不同的地方引用它两次,但它应该是相同的语句,而不是随机不同的语句。您如何确保每个页面请求获得相同的随机对象?
假设您在每个页面请求中显示一个随机语句,并使用一个函数返回一个随机对象,例如:
Statement::get()->sort("RAND()")->limit("1");
但是现在在模板中,您想在不同的地方引用它两次,但它应该是相同的语句,而不是随机不同的语句。您如何确保每个页面请求获得相同的随机对象?
用一个记住对象的静态变量定义一个函数怎么样?
public function rndObj() {
static $obj = null;
if(!isset($obj)){
$obj = Statement::get()->sort("RAND()")->limit("1")->first();
}
return $obj;
}
然后rndObj
在模板中使用。
一种方法是在控制器init
函数中获取随机语句并将其分配给私有变量。我们添加一个 getRandomStatement 函数来获取随机语句:
class Page_Controller extends ContentController {
private $randomStatement;
public function init() {
parent::init();
$this->randomStatement = Statement::get()->sort('RAND()')->limit(1)->first();
}
public function getRandomStatement() {
return $this->randomStatement;
}
}