Home » PHP, Programing » symfonyでPEAR::Net_UserAgent_Mobileを使う

Check     このエントリーをはてなブックマークに追加

symfonyで携帯開発、第1弾。

機種の判定をテンプレートとプログラムでできるようにする

を実現する。

Perlでは有名なcpanモジュール、HTTP::MobileAgent。PHPでも同じようなモジュール、 PEAR::Net_UserAgent_Mobileがあるようだ。

さっそくインストール。pearを使って、簡単にインストールできる。

pear install -f -o net_userAgent_mobile

さてsymfonyで、どのように利用するのがいいのか。その場でrequire_onceしてしまっても問題ないが、symfonyの場合、フィルターを使えば、共通なインターフェースで利用できそうなので、フィルターを作ってみる。

app/app_dir/lib/myMobileFilter.class.php
[PHP]
isFirstCall())
{
$er = error_reporting();
if ($er > E_STRICT) {
error_reporting($er – E_STRICT);
}
require_once(‘Net/UserAgent/Mobile.php’);
$agent = Net_UserAgent_Mobile::singleton();
$this->getContext()->getRequest()->setAttribute(‘agent’, $agent);
}

// execute next filter
$filterChain->execute();
}
}
[/PHP]
フィルターのご作法にのっとり、とりあえず書いてみた。14行目で”agent”という属性を予約して、オブジェクトをぶち込んでいる。

8~11行目のエラーの取り扱いは、なぜかdevモードでNet_UserAgent_Mobileをrequire_onceすると、Strict Standards:~というwarningが気になったので、入れている。

filterを登録するには下記のようにfilters.ymlを編集する。

app/app_dir/config/filters.yml
[code]
rendering: ~
web_debug: ~
security: ~
myMobileFilter:
class: myMobileFilter
cache: ~
common: ~
flash: ~
execution: ~
[/code]

そして利用する場合、actionクラス内なら
[PHP]
if ($this->getRequest()->getAttribute(‘agent’)->isDoCoMo()){
}
[/PHP]
view内なら
[PHP]
getAttribute(‘agent’)->isDoCoMo()): ?>
[/PHP]
こんな感じで呼び出し可能。

sfRequestに詰め込むのが、ちょっと気持ち悪い気もするが、これでいいのか、もう少し検証が必要。

なお、Net_UserAgent_Mobileは、結構更新されるようなので、Pearの更新RSSフィードを取得しておけば、運用面も安心だ。

Check     このエントリーをはてなブックマークに追加
タグ: ,