Laravel의 맞춤 검증 및 테스트
소개
공식 커스텀 밸리데이션의 문서가 지금 하나 알기 어렵기 때문에, 순서를 정리하기로 했다.
이번에는 샘플로서 후리가나의 검증을 작성한다.
※이전에 쓴 통상 밸리데이션의 응용
ぃ tp // 코 m / 코마 t · ms / 422bc 9847 또는 3 a 79 9
환경
맞춤 검증 생성 절차
서비스 제공업체 작성
php artisan make:provider ValidatorServiceProvider
작성된 클래스를 다음과 같이 편집.
app/Providers/ValidatorServiceProvider.php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Domain\CustomValidator;
class ValidatorServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
\Validator::resolver(function ($translator, $data, $rules, $messages) {
return new CustomValidator($translator, $data, $rules, $messages);
});
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
//
}
}
만든 서비스 공급자를 구성 파일에 추가
config/app.php
'providers' => [
...
App\Providers\ValidatorServiceProvider::class,
...
사용자 지정 유효성 검사 논리를 작성하는 파일 만들기
이번에는
domain
라는 디렉토리를 만들고 그 아래에 CustomValidator.php
를 만들었습니다.domain/CustomValidator.php
namespace Domain;
class CustomValidator extends \Illuminate\Validation\Validator
{
/**
* ふりがなのバリデーション
*
* @param $attribute
* @param $value
* @param $parameters
* @return bool
*/
public function validateKana($attribute, $value, $parameters)
{
if (mb_strlen($value) > 100) {
return false;
}
if (preg_match('/[^ぁ-んー]/u', $value) !== 0) {
return false;
}
return true;
}
}
자동 로드 설정
composer.json
의 psr-4 설정에 domain
디렉토리 부하를 자동 로드할 수 있도록 추가※이것을 눈치채지 못하고 빠졌다
composer.json
...
"autoload": {
"psr-4": {
"App\\": "app/",
"Domain\\": "domain/",
}
}
...
오류 메시지 파일에 추가
resources/lang/en/validation.php
return [
...
'kana' => ':attributeはひらがなで入力をしてください。',
...
'attributes' => [
...
'family_name_kana' => 'ふりがな(せい)',
'given_name_kana' => 'ふりがな(めい)',
...
],
맞춤 유효성 검사 사용
사용법은 통상의 밸리데이션과 같고,
'family_name_kana' => 'required|kana',
와 같이 사용하고 싶은 바리데이션을 |
단락으로 지정하면 된다.app/Http/Controllers/RegistersController.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Validator;
class RegistersController extends Controller
{
...
public function confirm(Request $request, $registerToken)
{
\Validator::make(
[
'family_name_kana' => trim($request->get('family_name_kana')),
'given_name_kana' => trim($request->get('given_name_kana')),
],
[
'family_name_kana' => 'required|kana',
'given_name_kana' => 'required|kana',
]
}->validate();
}
return view('registers/registers_confirm');
...
}
밸리데이션 실시 결과
ふりがな(せい)
가 카타카나로 POST 했으므로, 제대로 걸려 있다.테스트 코드 작성
제대로 유효성을 검사하는 코드를 작성합니다.
tests/domain/validation/KanaTest.php
<?php
/**
* かなのバリデーションのテストクラス
*/
namespace Tests\Domain\Validation;
use Validator;
class KanaTest extends \TestCase
{
/**
* 正常系テスト
*
* @dataProvider successParamsProvider
* @param array $values
*/
public function testSuccess($values)
{
$validator = \Validator::make(
[
'family_name_kana' => $values,
'given_name_kana' => $values,
],
[
'family_name_kana' => 'required|kana',
'given_name_kana' => 'required|kana',
]
);
$this->assertTrue(
$validator->passes()
);
}
/**
* 正常系パラメータ用のデータプロバイダー
*
* @return array
*/
public function successParamsProvider()
{
return [
'ひらがな' => [
'やきにくていしょく',
],
'大きな文字列(かなは100文字まで)' => [
str_repeat('あ', 100)
],
];
}
/**
* 異常系テスト
*
* @dataProvider failParamsProvider
* かなに不適切な文字が入力されている
*
* @param array $values
*/
public function testFail($values)
{
$validator = \Validator::make(
[
'family_name_kana' => $values,
'given_name_kana' => $values,
],
[
'family_name_kana' => 'required|kana',
'given_name_kana' => 'required|kana',
]
);
$this->assertTrue(
$validator->fails()
);
}
/**
* 異常系パラメータ用のデータプロバイダー
*
* @return array
*/
public function failParamsProvider()
{
return [
'数字' => [
1,
],
'漢字' => [
'焼肉定食',
],
'カタカナ' => [
'ヤキニクテイショク',
],
'大きな文字列(かなは100文字まで)' => [
str_repeat('あ', 101),
],
'NULL' => [
null,
],
'空' => [
'',
],
'スクリプト' => [
'<script>alert(1);</script>',
],
'\'' => [
'\'',
],
'/' => [
'/',
],
'<' => [
'<',
],
'¥' => [
'¥',
],
];
}
}
해설
한 사람
이것으로 밸리데이션 처리에 관해서는, 거의 대응할 수 있게 되었다.
Reference
이 문제에 관하여(Laravel의 맞춤 검증 및 테스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/komatzz/items/c64c83a004b7f2c63ce6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)