Теоретически, ваши контроллеры должны иметь возможность обрабатывать любые данные, поступающие через URL. Как правило, я проверяю актуальность данных (т. Е. Является ли это допустимым идентификатором базы данных, именем, командой и т. Д.), Прежде чем что-либо делать с ними. Я никогда не чувствовал необходимости проверки базовых типов в аргументах URL. Тестирование на NULL, безусловно, является хорошей идеей, хотя getParam
позволяет вам указать значение по умолчанию, если значение будет нулевым.
В любом случае, вот как бы я это сделал, если бы мне пришлось. Примечание. Я не проверял этот код. Это все «в теории».
Я бы передавал информацию о типе в массив defaults
моего объекта маршрута.
// assuming you're using an ini config for routes
routes.myroute.defaults.arg_types.id[] = 'integer'
// so your 'defaults' array will looks like:
Array(
[controller] => mycontroller
[action] => myactions
[arg_types] => Array
(
[id] => Array
(
[0] => notnull
[1] => integer
)
)
)
Затем я написал бы плагин Controller, который проверяет каждый аргумент на основе данных конфигурации, которые мы указали во время цикла отправки:
public function preDispatch($request)
{
$params = $request->getParams();
$route = Zend_Controller_Front::getInstance()->getRouter()->getCurrentRoute();
$type_args = $route->getDefault('type_args');
foreach($params as $param) {
if (!in_array($param, $type_args)) {
continue;
}
foreach($type_args[$param] as $type) {
switch($type) {
case 'notnull':
// validate for null
break;
case 'integer':
// validate for integer
break;
// etc.
}
}
}
}
Очевидно, что здесь есть немного больше логики, например, что делать, когда что-то не подтверждается.