【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’を入れてしまう。

そして文字列の結合は’.=’を使って書くと重複分がなくなりスッキリしますね。

ということで、サンプルコードをエラーが出ないように書き換えてみました。

まぁ、講義のためのサンプルなので実際に運用できるきちっとしたコードではないのでしょうが、ちょっと気になったので書き換えてみた、ということでした。

コメントを残す

名前、メールアドレスは任意です。メールアドレスが公開されることはありません。

内容をご確認の上、送信してください。