理論上、あなたのコントローラは、来るすべてのデータを処理できるはずですURLを介して。通常、私は何かをする前に、データの関連性を検証します(つまり、正当なデータベースのID、名前、コマンドなど)。私は実際には、url引数のベースライン型検証の必要性を感じなかった。 getParam
は、値がnullの場合にデフォルトを指定することができますが、NULLのテストは確かに良い考えです。
とにかく、私がしなければならなかった場合、これはどうやってやるのですか。 注:私はこのコードを実際にテストしていません。それはすべて「理論上」です。
私のルートオブジェクトの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
)
)
)
は、その後、私たちはディスパッチループ中に指定した設定データに基づいて、各引数の検証コントローラプラグイン記述します。明らかに
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.
}
}
}
}
を、なるようにかなり多くのロジックがあります物事が検証されなかった場合の処置など、ここで扱われます。
つまり、コントローラーで行う必要がありますか?私はルータの存在(おそらく正規表現ルート)を使ってパラメータの存在とタイプの検証が少なくともできるかどうか疑問に思っていた。 –
コントローラーの1つの単語でYES。そして、tawfekovのソリューションはよりクリーンです。入力に1つのバリデータを使用し、DBエントリを検証するために1つのバリデータを使用できます。 – gabel