手順としては、まずPOSTはPostクラス、GETはUrlParameterクラスが受け取ります。
(リクエスト振り分けクラスDispatcherがGETはスラッシュ区切りの第3パラメータ以降としていたのでした。)
次に、RequestクラスがPostインスタンス、UrlParameterインスタンスを引数に取り、
そののちgetRequest()メソッドで使えるようにします。
ここで、Requestクラスは2種類のインスタンスを引数に取りますが、
その2種類にはsetValues()メソッドを持って欲しいのです。
そこで、RequestInterfaceを定義します。
<?php namespace saso\classes\base; interface RequestInterface{ function setValues(); }それを実装したものが以下の二つです。
<?php namespace saso\classes\base; class Post implements RequestInterface{ private $_values; public function setValues(){ foreach($_POST as $key => $value){ $value = htmlspecialchars($value, ENT_QUOTES, 'UTF-8'); $this->_values[$key] = $value; } return $this->_values; } }
<?php namespace saso\classes\base; class UrlParameter implements RequestInterface{ private $_values; public function setValues(){ foreach($_GET as $key => $value){ $this->_values[$key] = $value; } return $this->_values; } }Requestクラスはコンストラクタでインターフェースをタイプヒンティングしています。
<?php namespace saso\classes\base; class Request{ private $_request; public function __construct(RequestInterface $r){ $this->_request = $r->setValues(); } private function _hasKey($key){ if(false == array_key_exists($key,$this->_request)){ return false; } return true; } public function getRequest($key = null){ if(null == $key){ return $this->_request; }//キーを指定されなかったら、全部を配列で返す。 if(false == $this->_hasKey($key)){ return null; }//言われたキーがない場合nullを返す return $this->_request[$key];//普通は言われたキーのヴァリューを返す } }使い方は以下の通りです。
<?php $post = new base\Post(); $name = new base\Request($post); echo $name->getRequest('itemName');
参考:http://www.objective-php.net/
0 件のコメント:
コメントを投稿