回應後期處理(Post-processing response)

有時候,我們需要對傳到瀏覽器的資料,進行後期處理(post-process)。比方說 Wordpress 引擎使用的標籤:

This is [username]. We have [visitor_count] visitors on website.

然後 username 和 visitor_count 會自動換成對應的內容。

1. 作法

Yii 在這方面的彈性很高,所以很容易達成:

Yii::$app->getResponse()->on(Response::EVENT_AFTER_PREPARE, function($event) {
    /** @var User $user */
    $user = Yii::$app->getUser()->getIdentity();
    $replacements = [
        '[username]' => $user->username,
        '[visitor_count]' => 42,
    ];

    $event->sender->content = str_replace(array_keys($replacements), array_values($replacements), $event->sender->content);
});

上面的程式碼,我們使用了Response::EVENT_AFTER_PREPARE,讓該函式可以在傳至瀏覽器之前呼叫。在回傳事件裡面的$event->sender是我們包裝回應的物件,回應的內容則裝在content參數內。所以我們在$event->sender->content找尋並替換標籤。

results matching ""

    No results matching ""