6

Lets say you show a random statement per page request and use a function to return a random object like:

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

But now in the template you want to reference it twice in different places but it should be the same statement and not a randomly different one. How would you make sure to get the same random object per page request?

4

2 に答える 2

4

オブジェクトを記憶する静的変数を持つ関数を定義するのはどうですか?

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

rndObjテンプレートで使用します。

于 2013-04-03T20:57:58.440 に答える
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;
    }
}
于 2016-07-14T23:53:04.583 に答える