SilverStripe的每页请求随机对象

时间:2013-04-03 20:33:38

标签: php silverstripe

假设您显示每页请求的随机语句,并使用函数返回一个随机对象,如:

Statement::get()->sort("RAND()")->limit("1");

但是现在在模板中你想在不同的地方引用它两次,但它应该是相同的语句而不是随机不同的语句。您如何确保每页请求获得相同的随机对象?

2 个答案:

答案 0 :(得分:4)

使用记住对象的静态变量定义函数怎么样?

public function rndObj() {
   static $obj = null;
   if(!isset($obj)){
      $obj = Statement::get()->sort("RAND()")->limit("1")->first();
   }
   return $obj;
}

然后在模板中使用rndObj

答案 1 :(得分:1)

执行此操作的一种方法是在控制器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;
    }
}