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;
	}
	$data['xxxx_xxxx'] = $value;
	$this->merge($data);
}

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

-Laravel