Laravel8 繝ュ繧ー繧、繝ウ讖溯ス螳溯」4 蛟、繧ェ繝悶ず繧ァ繧ッ繝医r逕ィ縺縺溘ヰ繝ェ繝繝シ繧キ繝ァ繝ウ
蜑榊屓縺ッlaravel繧剃スソ縺」縺ヲ莨壼藤繧オ繧、繝医ョ蝓コ譛ャ讖溯ス繧呈ァ狗ッ峨@縺セ縺励◆縲
縺励°縺励√%繧後°繧画ゥ溯ス繧呈僑蠑オ縺励※縺縺上%縺ィ繧定縺医k縺ィ
蜀驛ィ讒矩繧貞ー代@謾ケ濶ッ縺励※縲∵僑蠑オ諤ァ繧帝ォ倥a繧句ソ隕√′縺ゅj縺セ縺吶
縺昴%縺ァ莉雁屓縺ッ縲後ラ繝。繧、繝ウ鬧蜍戊ィュ險医阪ョ閠縺域婿繧定諷ョ縺励↑縺後i縲∵ゥ溯ス諡。蠑オ繧偵@縺ヲ縺縺阪∪縺吶
- 1. 繝峨Γ繧、繝ウ鬧蜍戊ィュ險(DDD)縺ィ縺ッ
- 2. 謇矩
- 2.1. 蛟、繧ェ繝悶ず繧ァ繧ッ繝医ョ菴懈
- 2.1.1. 縺ァ縲√←縺繧繧九ョ
- 2.2. 繧ッ繝ゥ繧ケ縺ョ隱ャ譏
- 2.2.1. 繧ウ繝ウ繧ケ繝医Λ繧ッ繧ソ
- 2.2.2. rules
- 2.2.3. 蛟、繧ェ繝悶ず繧ァ繧ッ繝医〒陦ィ迴セ縺ァ縺阪↑縺繝ォ繝シ繝ォ縺ォ縺、縺縺ヲ
- 2.2.4. value
- 2.2.5. equals
- 2.3. 繝輔か繝シ繝繝ェ繧ッ繧ィ繧ケ繝医ョ菴懈
- 2.3.1. authorize
- 2.3.2. rules
- 2.3.3. messages
- 2.4. 繝輔か繝シ繝繝ェ繧ッ繧ィ繧ケ繝医°繧峨Γ繝繧サ繝シ繧ク繧貞女縺大叙繧
- 3. 繝ュ繧ー繧、繝ウ讖溯ス騾」霈我ク隕ァ
繝峨Γ繧、繝ウ鬧蜍戊ィュ險(DDD)縺ィ縺ッ
縲後ラ繝。繧、繝ウ繝「繝繝ェ繝ウ繧ー縲阪〒縺吶よ悽遞ソ縺ァ縺ッ隧ウ邏ー縺ッ蜑イ諢帙@縺セ縺吶′縲
蛟、繧ェ繝悶ず繧ァ繧ッ繝茨シvalue objectシ峨→縺ッ縲∵ー丞錐繧萓。譬シ縺ェ縺ゥ縺ョ諠蝣ア繧偵ラ繝。繧、繝ウ縺ィ縺励※縺ィ繧峨∴
繧ェ繝悶ず繧ァ繧ッ繝医→縺励※螳夂セゥ縺励h縺縺ィ縺縺繧ゅョ縺ァ縺吶
繝峨Γ繧、繝ウ鬧蜍戊ィュ險医r逅隗」縺吶k荳翫〒繧ゅ″縺」縺九¢驥崎ヲ√↑閠縺域婿縺ァ縺吶
隧ウ邏ー縺ォ荳玖ィ倥#蜿り縺セ縺ァ縲
謇矩
繝峨Γ繧、繝ウ鬧蜍戊ィュ險医r諢剰ュ倥@縺ェ縺後i縲√ヰ繝ェ繝繝シ繧キ繝ァ繝ウ繝ュ繧ク繝繧ッ繧呈僑蠑オ縺
繧キ繧ケ繝繝縺悟、ァ縺阪¥縺ェ縺」縺ヲ繧ゅΓ繝ウ繝繝ウ繝翫Φ繧ケ諤ァ縺瑚誠縺。縺ェ縺繧医≧縺ェ繧ウ繝シ繝峨↓菫ョ豁」縺励※縺縺阪∪縺吶
謇矩縺ッ荳玖ィ倥ョ騾壹j縺ァ縺吶
- 蛟、繧ェ繝悶ず繧ァ繧ッ繝医ョ菴懈
- 繝輔か繝シ繝繝ェ繧ッ繧ィ繧ケ繝医r菴懈
- 繝輔か繝シ繝繝ェ繧ッ繧ィ繧ケ繝医°繧峨Γ繝繧サ繝シ繧ク繧貞女縺大叙繧
蛟、繧ェ繝悶ず繧ァ繧ッ繝医ョ菴懈
縲碁崕隧ア逡ェ蜿キ縲阪d縲後Γ繝シ繝ォ繧「繝峨Ξ繧ケ縲阪御ス乗園縲阪↑縺ゥ縲∝酔縺倥取枚蟄怜励上〒縺吶′
縺昴l縺槭l謨ー蟄励〒縺ゅ▲縺溘j@繝槭シ繧ッ縺悟ソ鬆医□縺」縺溘j縲∝、画焚縺ィ縺励※縺ョ繝ォ繝シ繝ォ縺後≠繧翫∪縺吶
縺薙ョ縲弱Ν繝シ繝ォ縺ォ蠕薙▲縺溷・蜉帙ョ縺ソ險ア縺吶上h縺縺ォ蛻カ蠕。縺吶k縺ョ縺後√ヰ繝ェ繝繝シ繧キ繝ァ繝ウ縺ァ縺吶
縺溘□縲∝燕蝗樊ァ狗ッ峨@縺溘ヰ繝ェ繝繝シ繧キ繝ァ繝ウ繝ュ繧ク繝繧ッ縺ォ縺ッ隱イ鬘後′縺ゅj縺セ縺吶
荳玖ィ倥′莨壼藤逋サ骭イ逕サ髱「縺ョ繧ウ繝ウ繝医Ο繝シ繝ゥ繝シ縺ァ縺吶
protected function validator(array $data)
{
Log::debug('validator');
return Validator::make($data, [
'login_id' => ['required', new alpha_num_check(), 'max:20','unique:users'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required','confirmed'],
'zip-code' => ['required', 'string', 'max:7'],
'prefecture' => ['required', 'string', 'max:5'],
'city' => ['required', 'string', 'max:20'],
'address1' => ['required', 'string', 'max:20'],
'address2' => ['required', 'string', 'max:20'],
'tel' => ['required', 'string', 'max:9'],
]);
}
繧ウ繝ウ繝医Ο繝シ繝ゥ繝シ縺ォ繝舌Μ繝繝シ繧キ繝ァ繝ウ繝ュ繧ク繝繧ッ繧定ィ倩シ峨@縺ヲ縺縺セ縺吶
縺ァ縺ッ縲∽サ雁セ御シ壼藤諠蝣ア縺ョ螟画峩繝壹シ繧ク繧剃ス懈舌@縺溷エ蜷医↓繝舌Μ繝繝シ繧キ繝ァ繝ウ讖溯ス縺ッ縺ゥ縺縺ェ繧九〒縺励g縺縲
protected function validator(array $data)
{
Log::debug('validator');
return Validator::make($data, [
'login_id' => ['required', new alpha_num_check(), 'max:20','unique:users'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required','confirmed'],
'zip-code' => ['required', 'string', 'max:7'],
'prefecture' => ['required', 'string', 'max:5'],
'city' => ['required', 'string', 'max:20'],
'address1' => ['required', 'string', 'max:20'],
'address2' => ['required', 'string', 'max:20'],
'tel' => ['required', 'string', 'max:9'],
]);
}
縺ゥ縺薙°縺ァ隕九◆繧ウ繝シ繝峨r譖ク縺上%縺ィ縺ォ縺ェ繧翫∪縺吶ュ縲
縺薙ョ繧医≧縺ォ
蜷後§縲後Ο繧ー繧、繝ウID縲阪↓蟇セ縺吶k逋サ骭イ讖溯ス縺後≠繧九◆縺ウ縺ォ縲√ヰ繝ェ繝繝シ繧キ繝ァ繝ウ繝ュ繧ク繝繧ッ繧定ィ倩シ峨☆繧句ソ隕√′蜃コ縺ヲ縺阪※縺励∪縺縺セ縺吶
縺薙ョ繧医≧縺ェ繧ウ繝シ繝峨r譖ク縺縺ヲ縺繧九→縲∫判髱「縺ォ繧医▲縺ヲ繝舌Μ繝繝シ繧キ繝ァ繝ウ繝ュ繧ク繝繧ッ縺檎焚縺ェ縺」縺溘j縺励※繝舌げ縺ョ貂ゥ蠎翫↓縺ェ繧翫°縺ュ縺セ縺帙s縲
縺昴%縺ァ縲∝、繧偵が繝悶ず繧ァ繧ッ繝医→縺励※謐峨∴縲√◎繧後◇繧後ョ繧ェ繝悶ず繧ァ繧ッ繝医↓蟇セ縺励※縺ョ繝ォ繝シ繝ォ縺ッ縺セ縺ィ繧√※縲後さ繝シ繝芽ェ菴薙′繝ォ繝シ繝ォ繧定。ィ迴セ縺吶k縲阪h縺縺ォ縺励∪縺吶
縺ァ縲√←縺繧繧九ョ
繧オ繝ウ繝励Ν繧ウ繝シ繝峨〒縺吶よー丞錐縺ォ縺、縺縺ヲ縺ョ蛟、繧ェ繝悶ず繧ァ繧ッ繝医→縺励※險倩ソー縺励※縺縺セ縺吶
namespace App\ValueObjects;
class Name implements ValueObject
{
protected $value;
/**
* name constructor.
* @param $value
* @throws \Exception
*/
public function __construct($value)
{
if(empty($value)){
throw new \Exception(NAME.'縺ッ蠢鬆亥・蜉帙〒縺');
}
if(!preg_match('%\D+%',$value)) {
throw new \Exception(NAME.'繧呈ュ」縺励¥蜈・蜉帙@縺ヲ縺上□縺輔>');
}
if(mb_strlen($value) >; 21){
throw new \Exception(NAME.'縺ッ20譁蟄嶺サ・蜀縺ァ蜈・蜉帙@縺ヲ縺上□縺輔>');
}
$this->value = $value;
}
public static function rules(){
return 'required|max:20|regex:%\D+%';
}
public function value()
{
return $this->value;
}
public function equals($string):bool
{
return $this->value === $string->value;
}
/**
* @param string $value
* @return static
* @throws \Exception
*/
public static function of(string $value)
{
return new static($value);
}
/**
* @return string
*/
public function __toString()
{
return (string)$this->value;
}
/**
* @return mixed|string
*/
public function jsonSerialize()
{
return $this->value;
}
繧ッ繝ゥ繧ケ縺ョ隱ャ譏
繧ウ繝ウ繧ケ繝医Λ繧ッ繧ソ
逋サ骭イ讖溯ス莉・螟悶↓繧よー丞錐繧呈桶縺蝣エ髱「縺ッ縺ゅj縺セ縺吶ョ縺ァ縲√◎縺ョ髫帙↓繧ウ繝ウ繧ケ繝医Λ繧ッ繧ソ縺ィ縺励※豌丞錐繧呈シ邏阪@縺セ縺吶
繧サ繧ュ繝・繝ェ繝繧」隕ウ轤ケ縺ァ繧ゅ√さ繝ウ繧ケ繝医Λ繧ッ繧ソ縺ィ縺励※蛟、繧貞女縺大叙縺」縺滄圀縺ョ繝√ぉ繝繧ッ繝ュ繧ク繝繧ッ縺ッ蠢隕√〒縺吶
莉雁屓縺ッ縲悟ソ鬆亥・蜉帙阪梧律譛ャ隱槭阪20譁蟄嶺サ・蜀縲阪→縺縺繝ォ繝シ繝ォ繧定。ィ迴セ縺励※縺縺セ縺吶
rules
蛟、繧ェ繝悶ず繧ァ繧ッ繝医ョ繝舌Μ繝繝シ繧キ繝ァ繝ウ繝ォ繝シ繝ォ繧定ィ倩ソー縺励∪縺吶
逋サ骭イ逕サ髱「繧邱ィ髮逕サ髱「縺九i縺薙ョ繧ッ繝ゥ繧ケ繧貞他縺ウ蜃コ縺吶%縺ィ縺ァ縲√す繧ケ繝繝蜈ィ菴薙〒繝舌Μ繝繝シ繧キ繝ァ繝ウ繝ュ繧ク繝繧ッ縺檎オア荳縺ァ縺阪∪縺吶
隍謨ー縺ョ繝ォ繝シ繝ォ繧定ィ倩ソー縺吶k髫帙↓縺ッ縲芸縲阪〒謖溘s縺ァ縺縺阪∪縺吶
險倩シ牙庄閭ス縺ェ繝舌Μ繝繝シ繧キ繝ァ繝ウ繝ォ繝シ繝ォ縺ッLaravel縺ョ繝槭ル繝・繧「繝ォ繧偵#隕ァ縺上□縺輔>
https://readouble.com/laravel/8.x/ja/validation.html
蛟、繧ェ繝悶ず繧ァ繧ッ繝医〒陦ィ迴セ縺ァ縺阪↑縺繝ォ繝シ繝ォ縺ォ縺、縺縺ヲ
萓九∴縺ー縲√後ヱ繧ケ繝ッ繝シ繝峨ッ蜀榊・蜉幃逶ョ縺ィ荳閾エ縺励※縺繧倶コ九阪↑縺ゥ縺ッ莨壼藤逋サ骭イ逕サ髱「縺ォ髯仙ョ壹@縺溘Ο繧ク繝繧ッ縺ォ縺ェ繧翫∪縺吶
縺薙ョ蝣エ蜷医ッ縲∫匳骭イ逕サ髱「縺ョ繧ウ繝ウ繝医Ο繝シ繝ゥ繝シ縺ォ縺ヲ繝舌Μ繝繝シ繧キ繝ァ繝ウ繝ォ繝シ繝ォ繧定ソス蜉縺励∪縺
protected function validator(array $data)
{
Log::debug('validator');
return Validator::make($data, [
'password' => ['confirmed'],
]);
}
value
繧ウ繝ウ繧ケ繝医Λ繧ッ繧ソ縺九i蛟、繧貞叙繧雁コ縺吶→縺阪↓菴ソ縺縺セ縺吶
equals
繧ウ繝ウ繧ケ繝医Λ繧ッ繧ソ縺ョ蛟、縺ィ縺ョ豈碑シ繧定。後>縺セ縺吶
縺昴ョ莉悶け繝ゥ繧ケ縺ョ隱ャ譏弱ッ蜑イ諢帙@縺セ縺吶
縺薙l繧貞、繧ェ繝悶ず繧ァ繧ッ繝亥菴懈舌@縺ヲ縺縺阪∪縺吶
繝輔か繝シ繝繝ェ繧ッ繧ィ繧ケ繝医ョ菴懈
laravel縺ョ繧ウ繝槭Φ繝峨r菴ソ縺縺セ縺吶
php artisan make:request CustomerRegister
繧ウ繝槭Φ繝牙ョ溯。悟セ後∬ェ蜍輔〒繝輔ぃ繧、繝ォ縺御ス懈舌&繧後∪縺吶
app/Http/Requests/CustomerRegister.php
class CustomerRegister extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
//竭 true縺ォ螟画峩縺吶k
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
//竭。縲繝舌Μ繝繝シ繧キ繝ァ繝ウ繝ォ繝シ繝ォ繧定ィ倩シ峨☆繧
return [
];
}
public function messages()
{
//竭「縲繝舌Μ繝繝シ繧キ繝ァ繝ウ繧ィ繝ゥ繝シ繝。繝繧サ繝シ繧ク繧定ィ倩シ峨☆繧
return [
];
}
}
隱榊庄縺ョ險ュ螳壹〒縺吶ゅョ繝輔か繝ォ繝医〒縺ッfalse縺ォ縺ェ縺」縺ヲ縺縺セ縺吶′縲》rue縺ォ螟画峩縺吶k蠢隕√′縺ゅj縺セ縺吶
false縺ョ縺セ縺セ縺縺ィ荳玖ィ倥ョ逕サ髱「縺ォ縺ェ繧翫∪縺吶

隱榊庄縺輔l縺ヲ縺縺ェ縺縺ィ縺縺繧ィ繝ゥ繝シ縺ァ縺吶ら判髱「縺ッ菫ョ豁」縺励◆縺縺ィ縺薙m縺ァ縺吶′縲∽サ雁セ後ョ蟇セ蠢懊→縺励∪縺吶
rules
繝輔か繝シ繝縺ォ蟇セ縺励※縺ョ繝舌Μ繝繝シ繧キ繝ァ繝ウ繝ォ繝シ繝ォ繧定ィ倩ソー縺励∪縺吶
菴懈先ク医∩縺ョ蛟、繧ェ繝悶ず繧ァ繧ッ繝医r蛻ゥ逕ィ縺吶k縺ィ荳玖ィ倥ョ繧医≧縺ォ險倩ソー縺ァ縺阪∪縺吶
public function rules()
{
return [
'address1' => Address1::rules(),
'address2' => Address2::rules(),
'city' => City::rules(),
'email' => Email::rules(),
'login_id' => Login_id::rules(),
'password' => Password::rules(),
'prefecture' => Prefecture::rules(),
'tel' => Tel::rules(),
'zip-code' => Zipcode::rules()
];
}
縺吶▲縺阪j縺励∪縺励◆縺ュ縲
messages
譛蠕後↓縲√お繝ゥ繝シ繝。繝繧サ繝シ繧ク繧偵き繧ケ繧ソ繝槭う繧コ縺励∪縺吶
public function messages()
{
return [
'required' => ':attribute 縺ョ蜈・蜉帙ッ蠢鬆医〒縺吶'
];
}
繝輔か繝シ繝繝ェ繧ッ繧ィ繧ケ繝医°繧峨Γ繝繧サ繝シ繧ク繧貞女縺大叙繧
繝ェ繧ッ繧ィ繧ケ繝医ョ繝シ繧ソ繧堤匳骭イ讖溯ス縺ォ蠑輔″貂。縺吝ヲ逅縺ォ繝ェ繧ッ繧ィ繧ケ繝医ヵ繧ゥ繝シ繝縺ョ繝繝シ繧ソ繧貞シ墓焚縺ィ縺励※霑ス蜉縺励∪縺吶
Laravel縺ョ莨壼藤讖溯ス縺ッ繝医Ξ繧、繝医r菴ソ縺」縺ヲ縺繧九◆繧√∽ク玖ィ倥′菫ョ豁」邂謇縺ォ縺ェ繧翫∪縺吶
src/Illuminate/Foundation/Auth/RegistersUsers.php
public function register(CustomerRegister $request)
{
Log::debug('register');
$this->validator($request->all())->validate();
event(new Registered($user = $this->create($request->all())));
$this->guard()->login($user);
return $this->registered($request, $user)
?: redirect($this->redirectPath());
}
蠑墓焚繧剃サ雁屓菴懈舌@縺溘ヵ繧ゥ繝シ繝繝ェ繧ッ繧ィ繧ケ繝医↓菫ョ豁」縺励※縺縺セ縺吶
public function register(request $request)
竊
public function register(CustomerRegister $request)
縺薙l縺ァ繝峨Γ繧、繝ウ鬧蜍戊ィュ險医r諢剰ュ倥@縺溘ヰ繝ェ繝繝シ繧キ繝ァ繝ウ繝ュ繧ク繝繧ッ縺ョ螳梧舌〒縺吶
Laravel繝ュ繧ー繧、繝ウ讖溯ス騾」霈我ク隕ァ
- Laravel 8縺ァ繝ュ繧ー繧、繝ウ讖溯ス螳溯」1縲蝓コ譛ャ讖溯ス
- Laravel 8縺ァ繝ュ繧ー繧、繝ウ讖溯ス螳溯」2縲繝ュ繧ー繧、繝ウID縺ョ蟆主・縲
- Laravel 8縺ァ繝ュ繧ー繧、繝ウ讖溯ス螳溯」3縲莨壼藤逋サ骭イ譎ゅョ蜈・蜉幃逶ョ霑ス蜉縲
- Laravel8縺ァ繝ュ繧ー繧、繝ウ讖溯ス螳溯」4 ValueObject縺ィ繝舌Μ繝繝シ繧キ繝ァ繝ウ縲竊舌縺縺セ縺薙%
- Laravel 8縺ァ繝ュ繧ー繧、繝ウ讖溯ス螳溯」5縲莨壼藤諠蝣ア螟画峩



蛻縺九j繧縺吶¥蜉ゥ縺九▲縺ヲ縺翫j縺セ縺吶
繧ゅ@繧医m縺励¢繧後ー莉・荳九r謨吶∴縺ヲ縺縺溘□縺代↑縺縺ァ縺励g縺縺具シ
縲後〒縲√←縺繧繧九ョ縲阪ョ遶縺ョ縲慶lass Name implements ValueObject
{ス橸ス橸ス槭阪さ繝シ繝峨ッ縲√←縺ョ繝輔ぃ繧、繝ォ縺ォ險倩ソー縺吶∋縺阪〒縺励g縺縺具シ
譁ー縺励¥繝輔ぃ繧、繝ォ繧剃ス懈舌☆繧九∋縺阪〒縺励g縺縺具シ
縺薙■繧峨ッ譁ー縺励¥class繝輔ぃ繧、繝ォ繧剃ス懈舌@縺ヲ縺縺セ縺吶
ValueObject縺斐→縺ォ繝輔ぃ繧、繝ォ繧剃ス懈舌@縺ヲ縺縺」縺ヲ縺翫j縺セ縺吶