質問: "12"; public function withValidator(\Illuminate\Contracts\Validation\Validator $validator) { $validator->sometimes( 'hoge_kana', 'hoge:' . parent::get( 'hoge' ), function ( $input ) { return mb_strlen( $input->hoge ) > 0; }); } 上記のような形でFormRequestを作成し、CustomValidator内で$parametersをdumpすると上記のように|でパースされるようです。 |を含む値をそのままCustomValidatorに渡すにはどのようにしたらよいでしょうか? urlencodeして渡し、CustomValidator側でurldecodeすれば目的は達成できますが、他にスマートな方法はないでしょうか?
回答: Laravelのバリデータはバリデーションルールを次のように一つの文字列で与えることもできますが、 ``` 'rule1:param11,param12,..|rule2:param21,param22,..|..' ``` `|`で区切られた部分を配列にばらして以下のようにしたり ``` [ 'rule1:param11,param12,..', 'rule2:param21,param22,..', .. ] ``` さらに`,`で区切られたパラメタをばらして ``` [ ['rule1', 'param11', 'param12',..], ['rule2', 'param21', 'param22',..], ... ] ``` のように与えることができます。 `|`や`,`による分解をエスケープする手段は提供されていない(*)ので、それらの文字をパラメタに使いたい場合には配列を使った2つ目のや3つ目のやり方にする必要があります。 今回の場合は ``` [['hoge', parent::get( 'hoge' )]] ``` とするのがいいのではないでしょうか。(入力パラメタは外部から与えられるものなので`,`が含まれないことを保証できないから2つ目のパターンも使うべきではないと思います) *: 実は正規表現をパラメタにとる`regex`,`not_regex`,`notregex`だけ`,`によるパラメタの分解をしない特別扱いをするようになっています。便利だけどちょっとずるい気が。