5.5.1 リクエストの情報を取得する

リクエストハンドラはクライアントとリクエストについての情報を提供する、いくつかのメソッドを持っています。

accepts ( $type = null)

$type には、文字列か配列、または null を割り当てることができます。 文字列を渡した場合、それで指定したコンテンツタイプをクライアントが受け付ける場合、 true が返されます。 配列で定義した場合、それらで指定したコンテンツタイプをクライアントが受け付ける場合、 true が返されます。null を指定すると、クライアントが受け付けるコンテンツタイプが配列で返されます。例は次のようになります。

class PostsController extends AppController {
	
    var $components = array('RequestHandler');

    function beforeFilter () {
        if ($this->RequestHandler->accepts('html')) {
            // クライアントが HTML(text/html) を受け付ける場合のコードをここに書く
        } elseif ($this->RequestHandler->accepts('xml')) {
            // クライアントが XML を受け付ける場合のコードをここに書く
        }
        if ($this->RequestHandler->accepts(array('xml', 'rss', 'atom'))) {
            // クライアントが XML 、 RSS 、 Atom を受け付ける場合のコードをここに書く
        }
    }
}
  1. class PostsController extends AppController {
  2. var $components = array('RequestHandler');
  3. function beforeFilter () {
  4. if ($this->RequestHandler->accepts('html')) {
  5. // クライアントが HTML(text/html) を受け付ける場合のコードをここに書く
  6. } elseif ($this->RequestHandler->accepts('xml')) {
  7. // クライアントが XML を受け付ける場合のコードをここに書く
  8. }
  9. if ($this->RequestHandler->accepts(array('xml', 'rss', 'atom'))) {
  10. // クライアントが XML 、 RSS 、 Atom を受け付ける場合のコードをここに書く
  11. }
  12. }
  13. }

別のリクエスト「型」を判定するメソッドは次のようになります。

isAjax()

リクエストに含まれる X-Requested-Header が XMLHttpRequest である場合に true を返します。

isSSL()

現在のリクエストが SSL 接続により行われていれば true を返します。

isXml()

現在のリクエストが XML のレスポンスを受け付けるなら true を返します。

isRss()

現在のリクエストが RSS のレスポンスを受け付けるなら true を返します。

isAtom()

現在のリクエストが Atom のレスポンスを受け付けるなら true を返し、そうでないなら false を返します。

isMobile()

ユーザエージェントがモバイルのウェブブラウザにマッチするか、クライアントが WAP のコンテンツを受け付けるなら、 true を返します。サポートしているモバイル端末のユーザエージェントは次のものになります。

  • iPhone
  • MIDP
  • AvantGo
  • BlackBerry
  • J2ME
  • Opera Mini
  • DoCoMo
  • NetFront
  • Nokia
  • PalmOS
  • PalmSource
  • portalmmm
  • Plucker
  • ReqwirelessWeb
  • SonyEricsson
  • Symbian
  • UP.Browser
  • Windows CE
  • Xiino
isWap()

現在のクライアントが WAP のコンテンツを受け付けるなら true を返します。

先にあげたリクエストの型を判定する全てのメソッドは、コンテンツタイプを特定するフィルター機能に似たやり方で使うことが出来ます。例えば、 Ajax リクエストに対するレスポンスではブラウザのキャッシュ機能を無効にし、デバッグレベルを変更したいことが多々あるでしょう。ところがこの場合でも、 Ajax ではないリクエストに関してはブラウザのキャッシュを有効にしておきたいと考えるかもしれません。 これを実現するには次のようにします。 The following would accomplish that:

	if ($this->RequestHandler->isAjax()) {
		Configure::write('debug', 0);
		$this->header('Pragma: no-cache');
		$this->header('Cache-control: no-cache');
		$this->header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
	}
	// コントローラアクションの続きを書く
  1. if ($this->RequestHandler->isAjax()) {
  2. Configure::write('debug', 0);
  3. $this->header('Pragma: no-cache');
  4. $this->header('Cache-control: no-cache');
  5. $this->header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
  6. }
  7. // コントローラアクションの続きを書く

同じ機能を持つ Controller::disableCache を使用することでも、キャッシュを無効にすることができます。

	if ($this->RequestHandler->isAjax()) {
	    $this->disableCache();
	}
	// コントローラアクションの続きを書く
  1. if ($this->RequestHandler->isAjax()) {
  2. $this->disableCache();
  3. }
  4. // コントローラアクションの続きを書く