TP 5のリクエスト対象の属性とメソッド注入

2752 ワード

1、属性注入:thinkRequest::instance()->属性
2、方法注入:thinkRequest::hook('方法','対応関数')
≪アクション|Actions|emdw≫:現在のリクエスト・オブジェクトに属性とメソッドをバインドします.リクエスト・オブジェクトは、適用されるライフサイクル全体で有効であり、現在のすべてのコントローラ・メソッドによって共有されるだけでなく、コントローラとモジュール間で呼び出されます.
app\index\index.phpの内容:
    PHP   ';
  } 
  public function demo1($name)
  {
    return $name; //    $name
  }
  public function demo2() //      $name
  {
    return $name; //      $name
  }
}
?>

変更:
    PHP   ';
  } 
  public function demo1($name)
  {
    return $this->request->param('name'); //    $name
  }
  public function demo2() //      $name
  {
    return $this->request->param('name'); //    $name
  }
}
?>

したがって、リクエストオブジェクトのいずれかのメソッドを呼び出すことで、リクエスト変数の共有を実現することができる.
しかし、コントローラやモジュールにまたがる場合にも使用できません.
例えば、コントローラに新しいDemoを作成します.phpファイル:
request->has('name','get')){
      return $this->request->param('name');
    } else {
      return '   ';
    }
  }
}
?>

この場合、存在しないと表示されます.オブジェクト注入を用いて解決できます.
リクエスト・オブジェクトに注入されるカスタム・プロパティとメソッドは、元のリクエスト・オブジェクトのプロパティとメソッドと同級であるため、アプリケーション全体のライフサイクルで有効です.
まず、現在適用されているcommon.phpファイル:
siteName = 'PHP   ';
?>

//         
function getSiteName(Request $request) //        Request     
{
  return '    :'.$request->siteName;
}
//         ,    
Request::hook('getSiteName','getiSiteName');

そしてindex.php:
    PHP   ';
  } 
  public function demo1()
  {
    return $this->request->siteName; 
  }
  public function demo2() 
  {
    return $this->request->getSiteName(); 
  }
}
?>

使用できます.では、demo 1とdemo 2をDemoにコピーしてみましょう.phpは、コントローラにまたがって使用できるかどうかを確認します.
request->siteName;
  }
  public function demo2()
  {
    return $this->request->getSiteName();
  }
}
?>

テストに成功したのと同じように、他のモジュールでも使えます.