【Laravel】クエリパラメータの適切な処理について
最近Laravelの勉強をしていて気になったことがありました。
public function index(Request $request) { $id = $request->query('page'); $msg = 'show page: ' . $id; ...以下略 }
こういうサンプルソースがあったのですが、このpageというクエリパラメータにもし配列が来たらどうなるの?と。
larastanで解析をかけてもこのようなエラーが出てくる。
Binary operation “.” between ‘show page: ‘and array|string|null results in an error.
$idは文字列であることを期待してサンプルは書かれているが、ここに配列を渡すと、
ErrorException (E_NOTICE) Array to string conversion
まぁこのようなエラーが出てきます。
ではどうしたらいいか。
$idの型によって処理を変えて整形してやればいい。
public function index(Request $request) { $id = $request->query('page'); if($id != null){ if (is_array($id)) { $msg = 'show page: ' . implode(',', $id); } else { $msg = 'show page: ' . $id; } } }
まず、nullかどうかをチェック。
そして配列かどうかをチェック。
配列であれば、implodeで配列を展開して文字列として結合。
nullでも配列でもなければstringなので、そのまま’.’で結合。
nullのときの処理も必要だが、省略。
こうすることで、エラーが発生せずにすみます。
ついでですが、上記のコードは’show page’が処理でカブっているのでもちょっとコードをきれいにしたい。
ということで次のように変更。
public function index(Request $request) { $msg = 'show page'; $id = $request->query('page'); if($id != null){ if (is_array($id)) { $msg .= implode(',', $id); } else { $msg .= $id; } } }
$msgを先に宣言し、’show page’を入れてしまう。
そして文字列の結合は’.=’を使って書くと重複分がなくなりスッキリしますね。
ということで、サンプルコードをエラーが出ないように書き換えてみました。
まぁ、講義のためのサンプルなので実際に運用できるきちっとしたコードではないのでしょうが、ちょっと気になったので書き換えてみた、ということでした。
参考
- タグ:
- Laravel