Zend FrameworkでURL入力($_GET
コンテナ)をフィルタリングする最良の方法は何ですか?
現在の実装は次のとおりです。 、、およびパラメーターを受け取るBookController
withがあります。まず、これらのパラメーターをフェッチし、デフォルト値をで指定します。indexAction
page
order
dir
_getParam()
これらのパラメーターごとに、特定のパラメーターを検証およびフィルター処理するメソッドをサービスレイヤーに作成します。入力が有効な場合は、フィルタリングされた値が返されます。そうでない場合は、FALSEが返されます。
コントローラの場合:
class BookController extends Zend_Controller_Action
{
public function indexAction()
{
// Fetch params and define default values
$page = $this->getParam('page', 1);
$order = $this->getParam('order', 'id');
$dir = $this->getParam('dir', 'asc');
// Instantiate service layer and validate individual parameters
$service = new Service_Book;
$page = $bookService->validatePageFromUrl($page);
$order = $bookService->validateOrderFromUrl($order);
$dir = $bookService->validateDirFromUrl($dir);
if ($page && $order && $dir)
{
// We're okay
}
else
{
// Redirect
}
}
}
サービスレイヤー内
class Service_Book
{
public function validatePageFromUrl($page)
{
$filters = array(
'page' => array(
'HtmlEntities',
'StripTags',
'StringTrim'
)
);
$validators = array(
'page' => array(
'int'
)
);
$data['page'] = $page;
$input = new Zend_Filter_Input($filters, $validators, $data);
if ($input->isValid())
{
return $input->page;
}
else
{
return FALSE;
}
}
public function validateOrderFromUrl($order)
{
$filters = array(
'order' => array(
'HtmlEntities',
'StripTags',
'StringTrim'
)
);
$validators = array(
'order' => array(
array('InArray', 'haystack' => $this->getColumnNames())
)
);
$data['order'] = $order;
$input = new Zend_Filter_Input($filters, $validators, $data);
if ($input->isValid())
{
return $input->order;
}
else
{
return FALSE;
}
}
public function validateDirFromUrl($dir)
{
$filters = array(
'dir' => array(
'HtmlEntities',
'StripTags',
'StringTrim'
)
);
$validators = array(
'dir' => array(
array('InArray', 'haystack' => array('asc', 'desc'))
)
);
$data['dir'] = $dir;
$input = new Zend_Filter_Input($filters, $validators, $data);
if ($input->isValid())
{
return $input->dir;
}
else
{
return FALSE;
}
}
}