View Hook

以下、記事一覧を持つトップページを例にします。

get("/", function(){
  $per_page = 10;
  view("index", [
    "articles" => Article::find($per_page),
    "per_page" => $per_page
  ]);
});

before/view Hook

Viewを読み込む前に、Viewに渡す変数やView名を加工することができます。

// タイトルに"test"が入っている記事を除外
Hook\register("before/view/index", function($pipe){
  $articles = $pipe["vars"]["articles"];
  $pipe["vars"]["articles"] = array_filter($articles, function($article){
    return strpos($article->title, "test") === FALSE;
  });

  return $pipe;
});

// 読み込むviewファイル自体を変更する
Hook\register("before/view/index", function($pipe){
  $pipe["name"] = "index2";
  return $pipe;
});


$pipeオブジェクトの例

{
  "name" => "index",
  "vars" => [
    "articles" => [Object, ...],
    "per_page" => 10
  ]
}

after/view Hook

// 生成されたHTMLから禁止ワードを削除する
Hook\register("after/view/index", function($pipe){
  $pipe["view"] = str_replace("NGワード", "***", $pipe["view"]);
  return $pipe;
});


$pipeオブジェクトの例

{
  "view" => "<!DOCTYPE html>\n<html lang=\"ja\">...</html>",
  "vars" => [
    "articles" => [Object, ...],
    "per_page" => 10
  ]
}