質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

Q&A

解決済

1回答

2340閲覧

[Fuel] APIパラメータのバリデーション

退会済みユーザー

退会済みユーザー

総合スコア0

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

0グッド

0クリップ

投稿2019/03/13 05:16

編集2019/03/13 06:29

Validation クラスをはじめて使おうとしているのですが使い方がわかりません
APIサーバーなのでモデルではなく入力パラメータに対して行いたいのですがそういうものではないのでしょうか

public function post_test() { $val = Validation::forge(); $val->add('lat', 'lat')->add_rule('required|numeric|numeric_between[-90,90]'); $val->add('lon', 'lon')->add_rule('required|numeric|numeric_between[-180,180]'); echo($val->run(array('lat' => Input::param('lat')))); echo($val->run(array('lon' => Input::param('lon')))); }

http://fuelphp.jp/docs/1.5/classes/validation/validation.html
をみながら試しにコントローラーの最初にこんな感じのコードをかいてみたのですが

_find_rule<strong>Notice:</strong> Invalid rule "required|numeric|numeric_between[-90,90]" passed to Validation, not used. in COREPATH/classes/validation.php [471]: _find_rule1

となってエラー理由がよくわかりません

バリデーションの書き方の入門解説サイトのような記事があれば教えていただけると助かります

追記

試行錯誤しているうちにエラーはなくなったのですが
バリデーションは全く機能していません
ためしに片方を数字 片方を文字列にして curl をたたいてみたのですがどちらも false になります

public function post_test() { $val = Validation::forge(); $val->add_field('lat', 'lat', 'required|valid_string[numeric]|numeric_between[-90,90]'); $val->add_field('lon', 'lon', 'required|valid_string[numeric]|numeric_between[-180,180]'); Util::log(Input::param('lat')); Util::log(($val->run(array('lat' => Input::param('lat')))) ? "true" : "false"); Util::log(Input::param('lon')); Util::log(($val->run(array('lon' => Input::param('lon')))) ? "true" : "false"); }

デバッグ表示結果

37 false abc false

フォームに対して複雑な rule をかく記事はたくさんでてくるのですが
APIで使う場合の最もシンプルな形での呼び出し方のサンプルコードのある記事がほとんどでてこなくて
何が悪いのかまったくわからないです…

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

APIで使う場合というのはあまり関係ない気がしますが、シンプルな形とすればこんな感じでしょうか。

PHP

1public function post_test() { 2 $val = Validation::forge(); 3 $val->add_field('lat', 'lat', 'required|valid_string[numeric]|numeric_between[-90,90]'); 4 $val->add_field('lon', 'lon', 'required|valid_string[numeric]|numeric_between[-180,180]'); 5 if ($val->run()) { 6 print "OK"; 7 } 8 else { 9 foreach ($val->error() as $k => $v) { 10 print $v; 11 } 12 } 13}

掲載されているコードについては、$val->run() の認識が違っているように思います。
run() は post データに対してバリデーションを実行しますので、掲載例だと run() の引数の指定は意味がありません。
run() の引数は、指定するとその内容で post データを強制的に上書きすることができるといったものです。

投稿2019/03/13 11:19

ssasaki

総合スコア1167

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/03/13 16:42

ありがとうございます 引数なしですべてのパラメーターを1度にチェックしてくれるんですね 引数1つ1つに対してよぶものだと勘違いしていました 片方でもNGがあると両方falseで両方とおればtrueになるということですね
ssasaki

2019/03/14 04:27

はい。そのとおりです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問