Laravel

【Laravel】booleanのバリデーションで文字列の"true"と"false"を通す

Laravelのbooleanのバリデーションは文字列のtrueとfalseは通しません。

The field under validation must be able to be cast as a boolean. Accepted input are truefalse10"1", and "0".

https://laravel.com/docs/9.x/validation#rule-boolean

true, false, 1, 0, "1", "0" が通りますが、
APIのGETなどのパラメータは文字列で渡ってくるため、デフォルトでは"0" / "1"で指定するしかありません。
文字列の"true"と"false"を通すためには、RequestクラスにてprepareForValidation()を使ってバリデーション前に値を加工します。

xxxx_xxxxにはis_targetなど実際にbooleanで受け取りたいパラメータ名を直接いれてください。

protected function prepareForValidation() {
	$value = $this->xxxx_xxxx;
	# 文字列表現のboolを実際のboolに変換
	if ($value === 'false') {
		$value = false;
	} elseif ($value === 'true') {
		$value = true;
	}
	$this->merge(['xxxx_xxxx' => $value]);
}

これで文字列のtrue / false でも正常に受け取ることができます。

Laravelでbooleanを扱う場合は下記も参考にしてください。

-Laravel