質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

3347閲覧

LaravelでCustomValidatorに|を含む$parametersの値をそのまま渡すには

spell

総合スコア16

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2018/11/06 04:55

編集2018/11/06 06:55

CentOS 7.3
php 7.2.11
Laravel 5.6
でサイトを構築しています。

FormRequestを用いてvalidateを行っています。
特定のカラムの値が入っていた場合にsometimesを用いてwithValidatorを使用しています。
バリデートしたいrequest parameterに|が挿入される可能性があります。
独自バリデータを作成中ですが、parameterに入力された値を使用したいのですがparameterに|が入っていると
CustomValidatorのparameterに渡る値がそこで切られてしまいます。

[e.g]
入力パラメータ:|12|34|
独自バリデータ:hoge:入力パラメータ

独自バリデータ内のparametersにわたる値
$parameters[ 0 ] = NULL;

入力パラメータ:12|34|
独自バリデータ:hoge:入力パラメータ

独自バリデータ内のparametersにわたる値
$parameters[ 0 ] = "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すれば目的は達成できますが、他にスマートな方法はないでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Laravelのバリデータはバリデーションルールを次のように一つの文字列で与えることもできますが、

php

1'rule1:param11,param12,..|rule2:param21,param22,..|..'

|で区切られた部分を配列にばらして以下のようにしたり

php

1[ 2 'rule1:param11,param12,..', 3 'rule2:param21,param22,..', 4 .. 5]

さらに,で区切られたパラメタをばらして

php

1[ 2 ['rule1', 'param11', 'param12',..], 3 ['rule2', 'param21', 'param22',..], 4 ... 5]

のように与えることができます。

|,による分解をエスケープする手段は提供されていない(*)ので、それらの文字をパラメタに使いたい場合には配列を使った2つ目のや3つ目のやり方にする必要があります。

今回の場合は

php

1[['hoge', parent::get( 'hoge' )]]

とするのがいいのではないでしょうか。(入力パラメタは外部から与えられるものなので,が含まれないことを保証できないから2つ目のパターンも使うべきではないと思います)

*: 実は正規表現をパラメタにとるregex,not_regex,notregexだけ,によるパラメタの分解をしない特別扱いをするようになっています。便利だけどちょっとずるい気が。

投稿2018/11/06 07:02

crhg

総合スコア1175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

spell

2018/11/06 09:48

短時間でのご回答ありがとうございました。 出来るだけクロージャを避けたかったのでregexを避けてコーディングしていました。 今後は時間があるときにextend元のソースを見るようにしようと思います。 今回はご教示頂いた3つ目の方法で実装する事にしました。 有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問