trim勝手にやってくれて助かる〜!
リクエストパラメータの先頭や末尾に含まれた空白文字を取り除いてくれるTrimStrings。
普段アプリ開発をしている時にはとても便利で助かるmiddlewareですね。
でも 配列の要素を$exceptに指定したはずなのに、改行がtrimされてる! ってなことがありまして...
その備忘録になります。
前提
// dd($request->input('sample'))での出力結果
array:3 [
0 => "sampleText1"
1 => "sampleText2"
2 => "sampleText3"
]
以降は、こんな形式のリクエストパラメータが返ってくるという前提で進みます!
(sampleの配列内の要素数は可変)
$exceptにキー書いたらそれで済む話じゃないの?
もし、返ってくる配列の要素数が固定されているのであれば、$exceptに下記のように指定すればそれで終わりです。
class TrimStrings extends Middleware
{
protected $except = [
'current_password',
'password',
'password_confirmation',
// 追加部分
'sample.0',
'sample.1',
'sample.2',
// ここまで
];
}
でも今回はsampleの要素数が可変なんだよなぁってことで、ワイルドカード使って指定しちゃおうと思ったわけです。
class TrimStrings extends Middleware
{
protected $except = [
'current_password',
'password',
'password_confirmation',
// 追加部分
'sample.*',
// ここまで
];
}
...動かん。
$exceptでワイルドカードが使えないことに初めて気づきました。
解決方法
ってことで、コンストラクタを使って、trimされる前に$exceptを書き換えよう! と書いたコードがこちらです。
class TrimStrings extends Middleware
{
public function __construct(Request $request)
{
$textList = $request->input('sample');
if(!empty($textList) && is_array($textList)) {
foreach ($textList as $index => $text) {
$this->except[] = 'sample.' . $index;
}
}
}
protected $except = [
'current_password',
'password',
'password_confirmation',
];
}
foreachで配列のインデックス番号を取得して$exceptに追加することで、改行がtrimされないようになりました!やった!