Cakephp コンポーネントの実例
Cakephpのコンポーネントの利用方法をエントリーしたので、実際の利用例を書いてみたい。題材はロボット判定で、検索エンジンのbotかどうか判定する処理をコントローラからコンポーネントに分割しています。
class isRobotsComponent extends Object { function gen() { if( strpos(USER_AGENT, "Spider") !== false or strpos(USER_AGENT, "bot") !== false or strpos($_SERVER["REMOTE_ADDR"], "150.70.") !== false ) { return true; } } }
ifの条件に合致しいた場合にはtrueを返すようにしておきます。USER_AGENTは定数としてユーザーエージェントが格納されるように設定しておきます(参考:定数のグローバル設定)。上のコードでは、ユーザーエージェントだけでなく、ipアドレスでの判定も行っており、
150.70.
で始まるipアドレスはtrueを返すようにしてあります。
Controller側
コントローラ側では、以下のようにして利用します。
$no_count = $this->isRobots->gen(); if ( $no_count ) { //コンポーネントからtrueが返された場合の処理 } else { //trueが返されなかった場合の処理 }
ユーザーエージェントやipアドレスの値によって、$no_countの真偽値が変化します。そのため、リクエスト元の状態により上のコードの$no_countのデータが変化し、リクエスト元に応じて異なる処理を行うことができます。
$no_countという変数名ですので、商品や記事毎に設定されたアクセスカウンタをカウントするのかしないのかといった制御をユーザーエージェントによって行うことができます。また、コンポーネント化してあるので、アクセスカウンタだけでなく、他の処理にも再利用することが可能になります。