[baserCMS] baserCMS3.0.7で追加したリクエストの判定法について
こんにちは、ナカエです。
wp_is_mobile みたいなモバイル判定を baserCMS で|WordPressユーザーのbaserCMS覚え書き
という記事を見て、そういえばどこにもリクエスト検出器の情報を書いていなかったなという事実を思い出しました。 良い機会なので、baserCMSのリクエストの判定法(検出器)を一部紹介します。
baserCMSのControllerクラスにおいては
としてアクセスできる例のアレのことです。
HTTPリクエストを表現するためにCakePHP2が用意したオブジェクトです。
CakeRequestは元々CakeRequest::is()、CakeRequest::isAll()という判定メソッドを備えています。
上記のような判定の種類1つ1つのことを検出器(Detector)と呼んでいます。
参考: リクエストを調べる
baserCMS3.0.7において、ユーザーエージェント判定周りをCakeRequestの機能を活用して書き直すにあたり、検出器も追加することにしました。
中でも一般的に使えそうなものは
利用例)
ユーザーエージェントの判定以外にも、以前は微妙に方法が統一されていなかった管理画面の判定などもすっきり書けるのでイベントリスナを使ったプラグインを書くときなんかにもおすすめです。
wp_is_mobile みたいなモバイル判定を baserCMS で|WordPressユーザーのbaserCMS覚え書き
という記事を見て、そういえばどこにもリクエスト検出器の情報を書いていなかったなという事実を思い出しました。 良い機会なので、baserCMSのリクエストの判定法(検出器)を一部紹介します。
CakeRequest
CakeRequestと書くとピンとこない方も多いかと思いますが、baserCMSのControllerクラスにおいては
$this->request;
としてアクセスできる例のアレのことです。
HTTPリクエストを表現するためにCakePHP2が用意したオブジェクトです。
CakeRequestは元々CakeRequest::is()、CakeRequest::isAll()という判定メソッドを備えています。
Controller内での利用例
$this->request->is('get'); // HTTPメソッドがGETかどうかを判定
$this->request->is('ajax'); // Ajaxリクエストを判定
$this->request->isGet(); //マジックメソッドによる呼び出しも可能 ※Cake的には非推奨らしい
//配列で渡すとOR条件
$this->request->is(array('put', 'post')) //HTTPメソッドがPUTまたはHTTPメソッドがPOSTであるかどうかを判定
//isAll()はAND条件
$this->request->isAll(array('ssl', 'delete')) //リクエストがSSL経由かつHTTPメソッドがDELETEであるかどうかを判定
上記のような判定の種類1つ1つのことを検出器(Detector)と呼んでいます。
baserCMS用の検出器追加
検出器は組込み以外に独自のものを付け加えることが出来ます。参考: リクエストを調べる
baserCMS3.0.7において、ユーザーエージェント判定周りをCakeRequestの機能を活用して書き直すにあたり、検出器も追加することにしました。
中でも一般的に使えそうなものは
mobile: ユーザーエージェントによるガラケー判定 CakeRequestに元々備わっているものをbaserCMS用に上書き
smartphone: ユーザーエージェントによるスマートフォン判定
mobileurl: アクセスされているのがガラケー用のURLかどうかを判定
smartphoneurl:アクセスされているのがスマートフォン用のURLかどうかを判定
admin: 管理画面判定
page: 固定ページかどうかを判定
といったところでしょうか。利用例)
$this->request->is('smartphone'); //UAがスマホ
$this->request->isSmartphone(); // 〃
$this->request->is('admin'); // 管理画面
$this->request->isAdmin(); // 〃
$request->is(array('smartphone', 'mobile')) //UAがスマートフォンまたはモバイル
$request->isAll(array('smartphone', 'page_display')) // UAがスマートフォンかつ、表示しようとしているのが固定ページ
ユーザーエージェントの判定以外にも、以前は微妙に方法が統一されていなかった管理画面の判定などもすっきり書けるのでイベントリスナを使ったプラグインを書くときなんかにもおすすめです。