先日、とある案件でフォームを作成した際に、お客様から指摘があって修正した際のメモです。
そもそも required とは指定フィールドが存在し、かつ空でなければ通しますということらしいのでスペースだと空ではないということになるんでしょう。
サービスプロバイダー作成
今回は CustomServiceProvider という名前で作る事にします。
まず、以下のコマンドを実行します。
php artisan make:provider CustomServiceProvider
コマンドを実行するとapp/Providers/CustomServiceProvider.phpが生成されます。
作成したapp/Providers/CustomServiceProvider.phpに以下を追記します。
app/Providers/CustomServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Validator;
class CustomServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
Validator::extend('space', function ($attribute, $value, $parameters, $validator) {
if( mb_ereg_match("^(\s| )+$", $value) ){
return false;
}else{
return true;
}
});
}
}
作成したサービスプロバイダーを設定ファイルに追加
先ほど追記したapp/Providers/CustomServiceProvider.phpを使用できるようにconfig/app.phpのprovidersに追加します。
config/app.php
'providers' => [
...
App\Providers\CustomServiceProvider::class,
...
],
カスタムバリデーションをコントローラーで実装
コントローラー内にエラーメッセージを設定していますが、resources/lang/ja/validation.php内に追加することも可能です。
app/Http/Controllers/ContactController.php
<?php
namespace App\Http\Controllers;
use App\Contact;
use Illuminate\Http\Request;
use Session;
use Redirect;
use Validator;
class ContactController extends Controller {
public function index() {
return view('contact');
}
public function send(Request $request) {
$this->validate($request, [
'name' => 'required|space',
], [
'name.space' => ':attributeは空白以外の文字もご記入下さい。',
], [
'name' => '氏名',
]);
$contact = new Contact($request->all());
return view('contact.send', compact('contact'));
}
}