โมเดลอัจฉริยะที่ตรวจสอบตนเองสำหรับ Eloquent ORM ของ Laravel Framework 5
อ้างอิงจากชุด Aware สำหรับ Laravel 3 โดย Colby Rabideau
ลิขสิทธิ์ (C) 2013-2015 Max Ehsan และ Igor Santos
เยี่ยมชมรายการเผยแพร่ของเรา บันทึกการเปลี่ยนแปลงเกิดขึ้นที่นั่น :)
เพิ่ม laravelbook/ardent
เป็นข้อกำหนดสำหรับ composer.json
(ดูเวอร์ชันเสถียรล่าสุดของเราบนป้ายสถานะ!):
{"ต้องการ": {"laravelbook/กระตือรือร้น": "3.*"}}
อัปเดตแพ็คเกจของคุณด้วย composer update
หรือติดตั้งด้วย composer install
คุณยังสามารถเพิ่มแพ็คเกจโดยใช้ composer require laravelbook/ardent
และระบุเวอร์ชันที่คุณต้องการในภายหลัง (สำหรับตอนนี้ dev-master
เป็นทางออกที่ดีที่สุดของคุณ)
หากคุณต้องการใช้ Ardent เป็นแพ็คเกจ ORM แบบสแตนด์อโลน คุณได้รับเชิญให้ใช้การกำหนดค่าต่อไปนี้ในไฟล์บูต/เริ่มต้นของโครงการของคุณ (เปลี่ยนคุณสมบัติตามฐานข้อมูลของคุณอย่างชัดเจน):
LaravelArdentArdentArdent::configureAsExternal(array( 'driver' => 'mysql', 'host' => 'localhost', 'port' => 3306, 'database' => 'my_system', 'username' => 'myself', 'รหัสผ่าน' => 'h4ckr', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci'), 'en'); //ภาษาอังกฤษเป็นภาษาเริ่มต้นของข้อความ อาจถูกเว้นว่างไว้
การแนะนำ
เริ่มต้นใช้งาน
การตรวจสอบอย่างง่ายดายด้วยความกระตือรือร้น
การเรียกข้อมูลข้อผิดพลาดในการตรวจสอบความถูกต้อง
การเอาชนะการตรวจสอบ
ข้อความแสดงข้อผิดพลาดการตรวจสอบแบบกำหนดเอง
กฎการตรวจสอบแบบกำหนดเอง
ตะขอรุ่น
คำจำกัดความที่ชัดเจนของความสัมพันธ์
ไฮเดรตเอนทิตีกระตือรือร้นโดยอัตโนมัติ
ล้างข้อมูลแบบฟอร์มที่ซ้ำซ้อนโดยอัตโนมัติ
แปลงคุณสมบัติข้อความที่ปลอดภัยโดยอัตโนมัติ
อัปเดตด้วยกฎที่ไม่ซ้ำใคร
คุณพบว่าตัวเองสร้างโค้ดสำเร็จรูปเดียวกันซ้ำในแอปพลิเคชันที่คุณสร้างบ่อยเพียงใด โค้ดประมวลผลแบบฟอร์มทั่วไปนี้ดูคุ้นเคยเกินไปสำหรับคุณหรือไม่?
Route::post('register', function() {$rules = array('name' => 'required|between:3,80|alpha_dash','email' => 'required|between:5,64|email |unique:users','password' => 'required|min:6|confirmed','password_confirmation' => 'จำเป็น|นาที:6');$validator = เครื่องมือตรวจสอบ::make(Input::all(), $rules);if ($validator->passes()) { ผู้ใช้::create(array('name' => Input::get('name'),'email' => Input::get('email'),'password' => Hash::make(Input:: รับ ('รหัสผ่าน')) ));return Redirect::to('/')->with('message', 'ขอบคุณสำหรับการลงทะเบียน!'); } else {return Redirect::to('/')->withErrors($validator->getMessages()); - - -
การนำสิ่งนี้ไปใช้ด้วยตนเองมักจะส่งผลให้มีโค้ดสำเร็จรูปซ้ำหลายครั้ง เป็นโบนัสเพิ่มเติม ผู้ควบคุม (หรือตัวจัดการเส้นทาง) จะอ้วนก่อนเวลาอันควร และโค้ดของคุณก็จะยุ่งเหยิง น่าเกลียด และเข้าใจยาก
จะเป็นอย่างไรถ้ามีคนอื่นช่วยยกของหนักให้คุณ? จะเป็นอย่างไรถ้าแทนที่จะรื้อฟื้นเรื่องยุ่งๆ ข้างต้น สิ่งเดียวที่คุณต้องพิมพ์คือสองสามบรรทัดนี้ล่ะ?...
Route::post('register', function() {$user = new User;if ($user->save()) {return Redirect::to('/')->with('message', 'ขอบคุณ สำหรับการลงทะเบียน!'); } else {return Redirect::to('/')->withErrors($user->errors()); - - -
เข้าสู่ความกระตือรือร้น!
Ardent - โซลูชั่นแบบครบวงจรที่ขับเคลื่อนด้วยฝุ่นวิเศษ เป็นมิตรกับข้อมือ และครบวงจรสำหรับมาตรฐานการฆ่าเชื้ออินพุตที่น่าเบื่อของคุณ!
นอกเหนือจากการเล่นแล้ว ฟังก์ชันการตรวจสอบความถูกต้องอินพุตอาจทำให้การเขียนและบำรุงรักษาน่าเบื่อได้อย่างรวดเร็ว Ardent จัดการกับความซับซ้อนเหล่านี้ด้วยการให้ความช่วยเหลือในการทำงานซ้ำๆ หลายๆ อย่างโดยอัตโนมัติ
Ardent ไม่เพียงแต่เหมาะสำหรับการตรวจสอบอินพุตเท่านั้น แต่ยังช่วยลดโค้ดโมเดลข้อมูล Eloquent ของคุณได้อย่างมาก Ardent มีประโยชน์อย่างยิ่งหากคุณพบว่าตัวเองเบื่อหน่ายกับการเขียนโค้ดที่คล้ายกันมากครั้งแล้วครั้งเล่าในแอปพลิเคชันหลาย ๆ ตัว
ตัวอย่างเช่น การลงทะเบียนผู้ใช้หรือการส่งโพสต์ในบล็อกเป็นข้อกำหนดการเขียนโค้ดทั่วไปที่คุณอาจต้องการนำไปใช้ในแอปพลิเคชันหนึ่งและนำมาใช้ซ้ำอีกครั้งในแอปพลิเคชันอื่น ด้วย Ardent คุณสามารถเขียนโมเดล อัจฉริยะที่ตระหนักรู้ในตนเอง ได้เพียงครั้งเดียว จากนั้นจึงนำกลับมาใช้ใหม่ (โดยไม่มีการดัดแปลงหรือแก้ไขเพียงเล็กน้อย) ในโปรเจ็กต์อื่น เมื่อคุณคุ้นเคยกับวิธีการทำสิ่งต่างๆ แล้ว คุณจะสงสัยจริงๆ ว่าคุณรับมืออย่างไรหากไม่มีความกระตือรือร้น
ไม่มีอาการบาดเจ็บที่สมองซ้ำแล้วซ้ำอีกสำหรับคุณ!
Ardent
มีเป้าหมายที่จะขยายคลาสพื้นฐาน Eloquent
โดยไม่เปลี่ยนแปลงฟังก์ชันการทำงานหลัก เนื่องจาก Ardent
เองเป็นผู้สืบทอดของ IlluminateDatabaseEloquentModel
โมเดล Ardent
ของคุณทั้งหมดจึงเข้ากันได้กับ Eloquent
อย่างสมบูรณ์ และสามารถควบคุมพลังเต็มรูปแบบของ Laravels ที่ยอดเยี่ยม OR/M
หากต้องการสร้างโมเดล Ardent ใหม่ เพียงทำให้คลาสโมเดลของคุณได้รับมาจากคลาสฐาน Ardent
ในตัวอย่างถัดไป เราจะใช้คลาสเนมสเปซที่สมบูรณ์เพื่อทำให้ตัวอย่างสะอาดขึ้น แต่ขอแนะนำให้คุณใช้ use
จากคลาสทั้งหมดของคุณ:
ใช้ LaravelArdentArdentArdent; คลาส User ขยาย Ardent {}
หมายเหตุ: คุณสามารถ ผสม โมเดล Eloquent ธรรมดาและวานิลลาของคุณเข้ากับผู้สืบทอด Ardent ได้อย่างอิสระ หากออบเจ็กต์โมเดลไม่ได้ขึ้นอยู่กับเนื้อหาที่ผู้ใช้ส่งมาดังนั้นจึงไม่จำเป็นต้องมีการตรวจสอบ คุณสามารถปล่อยให้คลาสโมเดล Eloquent เหมือนเดิมได้
โมเดล Ardent ใช้คลาส Validator ในตัวของ Laravel การกำหนดกฎการตรวจสอบความถูกต้องสำหรับโมเดลนั้นง่ายดาย และโดยทั่วไปจะทำในคลาสโมเดลของคุณเป็นตัวแปรคงที่:
ผู้ใช้คลาสขยาย LaravelArdentArdentArdent { public static $rules = array('name' => 'required|between:3,80|alpha_dash','email' => 'required|between:5,64|email|unique:users', 'รหัสผ่าน' => 'จำเป็น|นาที:6|ยืนยัน','password_confirmation' => 'จำเป็น|นาที:6', - -
หมายเหตุ : คุณสามารถใช้ไวยากรณ์อาร์เรย์สำหรับกฎการตรวจสอบได้เช่นกัน ฉันหวังว่าคุณจะไม่สนใจลิงก์เอกสาร Laravel แบบเก่า แต่สิ่งที่ดีเท่ากับเอกสารของ Laravel ก็คือ การอ้างอิงที่ชัดเจนเกี่ยวกับไวยากรณ์ไปป์/อาร์เรย์สำหรับกฎการตรวจสอบความถูกต้องนั้นน่าเสียดายที่หายไปตั้งแต่ 5.1
โมเดล Ardent จะตรวจสอบตัวเองโดยอัตโนมัติเมื่อมีการเรียกใช้ Ardent->save()
$user = ผู้ใช้ใหม่;$user->name = 'John doe';$user->email = '[email protected]';$user->password = 'test';$success = $user->save( ); // คืนค่าเท็จหากโมเดลไม่ถูกต้อง
หมายเหตุ: คุณยังสามารถตรวจสอบโมเดลได้ตลอดเวลาโดยใช้เมธอด
Ardent->validate()
เมื่อโมเดล Ardent ล้มเหลวในการตรวจสอบ ออบเจ็กต์ IlluminateSupportMessageBag
จะถูกแนบกับออบเจ็กต์ Ardent ซึ่งมีข้อความความล้มเหลวในการตรวจสอบ
เรียกข้อมูลอินสแตนซ์การรวบรวมข้อความแสดงข้อผิดพลาดในการตรวจสอบด้วยเมธอด Ardent->errors()
หรือคุณสมบัติ Ardent->validationErrors
ดึงข้อมูลข้อผิดพลาดในการตรวจสอบความถูกต้องทั้งหมดด้วย Ardent->errors()->all()
รับข้อผิดพลาดสำหรับแอตทริบิวต์ เฉพาะ โดยใช้ Ardent->validationErrors->get('attribute')
หมายเหตุ: Ardent ใช้ประโยชน์จากออบเจ็กต์ MessagesBag ของ Laravel ซึ่งมีวิธีการจัดรูปแบบข้อผิดพลาดที่เรียบง่ายและสวยงาม
มีสองวิธีในการแทนที่การตรวจสอบความถูกต้องของ Ardent:
forceSave()
ตรวจสอบโมเดล แต่บันทึกไม่ว่าจะมีข้อผิดพลาดในการตรวจสอบความถูกต้องหรือไม่ก็ตาม
ทั้ง Ardent->save($rules, $customMessages)
และ Ardent->validate($rules, $customMessages)
รับสองพารามิเตอร์:
$rules
คืออาร์เรย์ของกฎ Validator ที่มีรูปแบบเดียวกับ Ardent::$rules
เช่นเดียวกับพารามิเตอร์ $customMessages
(เหมือนกับ Ardent::$customMessages
)
อาร์เรย์ที่ ไม่ว่างเปล่า จะแทนที่กฎหรือข้อความแสดงข้อผิดพลาดแบบกำหนดเองที่ระบุโดยคลาสสำหรับอินสแตนซ์ของเมธอดนั้นเท่านั้น
หมายเหตุ: ค่าเริ่มต้นสำหรับ
$rules
และ$customMessages
คือarray()
; ดังนั้นหากคุณผ่านarray()
จะไม่มีอะไรถูกแทนที่
เช่นเดียวกับ Laravel Validator Ardent ให้คุณตั้งค่าข้อความแสดงข้อผิดพลาดแบบกำหนดเองโดยใช้ไวยากรณ์เดียวกัน
ผู้ใช้คลาสขยาย LaravelArdentArdentArdent { public static $customMessages = array('required' => 'The :attribute field is required.', - - -
คุณสามารถสร้างกฎการตรวจสอบแบบกำหนดเองได้เช่นเดียวกับที่คุณทำกับ Laravel Validator
Ardent ให้น้ำตาลสังเคราะห์บางส่วนเหนือเหตุการณ์โมเดลของ Eloquent: hooks โมเดลแบบดั้งเดิม เป็นวิธีง่ายๆ ในการเชื่อมต่อการดำเนินการเพิ่มเติมในช่วงเวลาต่างๆ ในชีวิตโมเดลของคุณ สามารถใช้เพื่อทำงานล้างข้อมูลเพิ่มเติมก่อนที่จะลบรายการ ทำการแก้ไขอัตโนมัติหลังจากการตรวจสอบเกิดขึ้น หรืออัปเดตโมเดลที่เกี่ยวข้องหลังจากการอัพเดตเกิดขึ้น
before
hooks เมื่อส่งคืน false
(โดยเฉพาะบูลีน ไม่ใช่แค่ค่า "falsy") จะหยุดการดำเนินการ ตัวอย่างเช่น หากคุณต้องการหยุดการบันทึกหากมีสิ่งผิดปกติในเมธอด beforeSave
เพียงแค่ return false
และการบันทึกจะไม่เกิดขึ้น และแน่นอนว่า afterSave
จะไม่ถูกเรียกเช่นกัน
นี่คือรายการ hooks ทั้งหมดที่มีอยู่:
before
/ afterCreate()
before
/ afterSave()
before
/ afterUpdate()
before
/ afterDelete()
before
/ afterValidate()
- เมื่อส่งคืน false จะหยุดการตรวจสอบ ทำให้การดำเนินการ save()
ล้มเหลวเช่นกัน เนื่องจากการตรวจสอบล้มเหลว
ตัวอย่างเช่น คุณอาจใช้ beforeSave
เพื่อแฮชรหัสผ่านของผู้ใช้ (จริงๆ แล้ว ควรใช้การแฮชอัตโนมัติจะดีกว่า!)
class User ขยาย LaravelArdentArdentArdent { public function beforeSave() {// หากมีรหัสผ่านใหม่ hash itif($this->isDirty('password')) { $this->password = Hash::make($this->password ); } คืนค่าจริง//หรือไม่ต้องคืนค่าใดเลย เนื่องจากมีเพียงค่าเท็จบูลีนเท่านั้นที่จะหยุดการดำเนินการ - -
beforeSave
และ afterSave
สามารถรวมไว้ในรันไทม์ได้ เพียงส่งผ่านการปิดด้วยโมเดลเป็นอาร์กิวเมนต์ของเมธอด save()
(หรือ forceSave()
)
$user->save(array(), array(), array(), function ($model) { // closure for beforeSaveecho "บันทึก model object..."; return true; }, ฟังก์ชั่น ($model) { // ปิดสำหรับ afterSaveecho "เสร็จสิ้น!"; - -
หมายเหตุ: การปิดควรมีหนึ่งพารามิเตอร์ เนื่องจากจะถูกส่งผ่านการอ้างอิงไปยังโมเดลที่กำลังบันทึก
คุณเคยเขียน Eloquent Model ที่มีความสัมพันธ์มากมาย เพียงเพื่อสังเกตว่าชั้นเรียนของคุณยุ่งแค่ไหน โดยที่มีเนื้อหาเดียวที่มีเนื้อหาเกือบจะเหมือนกับชื่อเมธอดนั้นเองหรือไม่?
ใน Ardent คุณสามารถกำหนดความสัมพันธ์ของคุณในอาร์เรย์ด้วยข้อมูลได้อย่างหมดจด และความสัมพันธ์จะทำงานเหมือนกับที่คุณกำหนดไว้ในวิธีการ นี่คือตัวอย่าง:
ผู้ใช้คลาสขยาย LaravelArdentArdentArdent { public static $relationsData = array('address' => array(self::HAS_ONE, 'Address'),'orders' => array(self::HAS_MANY, 'Order'),'groups' = > อาร์เรย์ (ตนเอง::BELONGS_TO_MANY, 'กลุ่ม', 'ตาราง' => 'groups_have_users') - }$user = ผู้ใช้::find($id);echo "{$user->address->street}, {$user->address->city} - {$user->address->state}";
ไวยากรณ์อาร์เรย์เป็นดังนี้:
ค่าดัชนีแรก: ชื่อความสัมพันธ์ เป็นหนึ่งใน hasOne
, hasMany
, belongsTo
, belongsToMany
, morphTo
, morphOne
, morphMany
หรือหนึ่งในค่าคงที่ที่เกี่ยวข้อง ( Ardent::HAS_MANY
หรือ Ardent::MORPH_ONE
เป็นต้น)
จัดทำดัชนีที่สอง: ชื่อคลาส พร้อมเนมสเปซที่สมบูรณ์ ข้อยกเว้นคือความสัมพันธ์ morphTo
ซึ่งไม่มีอาร์กิวเมนต์เพิ่มเติม
อาร์กิวเมนต์ที่มีชื่อ ตามด้วยอาร์กิวเมนต์ที่กำหนดไว้สำหรับเมธอด Eloquent ดั้งเดิม:
foreignKey
[เป็นทางเลือก] ใช้ได้กับ hasOne
, hasMany
, belongsTo
และ belongsToMany
table
, otherKey
[ทางเลือก] timestamps
[บูลีน ทางเลือก] และ pivotKeys
[อาร์เรย์ ทางเลือก] ใช้ได้สำหรับ belongsToMany
name
, type
และ id
, ใช้โดย morphTo
, morphOne
และ morphMany
(สองอันสุดท้ายต้องกำหนด name
)
หมายเหตุ: คุณลักษณะนี้อิงตามความสัมพันธ์แบบง่ายบน Yii 1.1 ActiveRecord
Ardent สามารถให้ความชุ่มชื้นแก่คลาสโมเดลเอนทิตีของคุณจากการส่งแบบฟอร์มโดยอัตโนมัติ!
มาดูการกระทำกัน พิจารณาข้อมูลโค้ดนี้:
$user = ผู้ใช้ใหม่;$user->ชื่อ = Input::get('name');$user->email = Input::get('email');$user->password = Hash::make(Input ::get('password'));$user->save();
เรามาเรียก เวทย์มนตร์ ของ Ardent และเขียนโค้ดก่อนหน้าใหม่:
$user = ผู้ใช้ใหม่;$user->save();
แค่นั้นแหละ! สิ่งที่เราทำก็แค่กำจัดสิ่งที่น่าเบื่อออก
เชื่อหรือไม่ว่าโค้ดด้านบนทำหน้าที่เหมือนกับโค้ดรุ่นเก่า แม้ว่าจะค่อนข้างเป็นพี่น้องกันอย่างละเอียดก็ตาม Ardent เติมวัตถุโมเดลด้วยคุณลักษณะจากข้อมูลแบบฟอร์มที่ผู้ใช้ส่ง ไม่ต้องเสียเวลาค้นหาคุณสมบัติ Eloquent ใดที่คุณลืมเติมอีกต่อไป ให้ Ardent ดูแลเรื่องน่าเบื่อในขณะที่คุณทำเรื่องสนุก ๆ ต่อไป!
โดยจะเป็นไปตามกฎการกำหนดจำนวนมากเดียวกันภายใน ขึ้นอยู่กับคุณสมบัติ $fillable
/ $guarded
หากต้องการเปิดใช้งานคุณสมบัติการให้น้ำอัตโนมัติ เพียงตั้งค่าตัวแปรอินสแตนซ์ $autoHydrateEntityFromInput
ให้เป็น true
ในคลาสโมเดลของคุณ อย่างไรก็ตาม เพื่อป้องกันการเติมคุณสมบัติที่มีอยู่แล้ว หากคุณต้องการให้ความชุ่มชื้นอัตโนมัติสำหรับสถานการณ์การอัปเดตด้วย คุณควรใช้ $forceEntityHydrationFromInput
แทน :
ผู้ใช้คลาสขยาย LaravelArdentArdentArdent { สาธารณะ $autoHydrateEntityFromInput = true; // ไฮเดรตในการตรวจสอบความถูกต้องของรายการใหม่ สาธารณะ $forceEntityHydrationFromInput = จริง; // ไฮเดรตทุกครั้งที่มีการเรียกการตรวจสอบ}
โมเดล Ardent สามารถล้างข้อมูลอินพุตที่ซ้ำซ้อนได้ อย่างน่าอัศจรรย์โดยอัตโนมัติ (เช่น การยืนยันรหัสผ่าน , CSRF _token
ที่ซ่อนอยู่ หรือฟิลด์วิธี HTTP _method
แบบกำหนดเอง) เพื่อให้ข้อมูลเพิ่มเติมไม่ถูกบันทึกลงในฐานข้อมูล Ardent จะใช้ช่องยืนยันเพื่อตรวจสอบความถูกต้องของการป้อนข้อมูลในแบบฟอร์ม จากนั้นจึงละทิ้งคุณลักษณะเหล่านี้อย่างรอบคอบก่อนที่จะบันทึกตัวอย่างโมเดลลงในฐานข้อมูล!
หากต้องการเปิดใช้งานคุณสมบัตินี้ เพียงตั้งค่าตัวแปรอินสแตนซ์ $autoPurgeRedundantAttributes
ให้เป็น true
ในคลาสโมเดลของคุณ:
ผู้ใช้คลาสขยาย LaravelArdentArdentArdent { สาธารณะ $autoPurgeRedundantAttributes = true; -
คุณยังสามารถล้างข้อมูลช่องเพิ่มเติมได้อีกด้วย แอตทริบิวต์ Ardent::$purgeFilters
คืออาร์เรย์ของการปิดซึ่งคุณสามารถเพิ่มกฎที่กำหนดเองได้ การปิดเหล่านั้นได้รับคีย์แอตทริบิวต์เป็นอาร์กิวเมนต์ และควรคืน false
สำหรับแอตทริบิวต์ที่ควรถูกลบทิ้ง แบบนี้:
ฟังก์ชั่น __construct($attributes = array()) { parent::__construct($attributes); $this->purgeFilters[] = function($key) {$purge = array('tempData', 'myAttribute');return ! in_array($คีย์, $purge); - -
สมมติว่าคุณมีแอตทริบิวต์ชื่อ password
ในคลาสโมเดลของคุณ แต่ไม่ต้องการเก็บเวอร์ชันข้อความธรรมดาไว้ในฐานข้อมูล สิ่งที่ต้องทำในทางปฏิบัติคือเก็บแฮชของเนื้อหาต้นฉบับ ไม่ต้องกังวล Ardent มีความสามารถเต็มที่ในการแปลงฟิลด์ที่ปลอดภัยจำนวนเท่าใดก็ได้ให้คุณโดยอัตโนมัติ!
ในการทำเช่นนั้น ให้เพิ่มชื่อแอตทริบิวต์ให้กับตัวแปรอาร์เรย์คงที่ Ardent::$passwordAttributes
ในคลาสโมเดลของคุณ และตั้งค่าตัวแปรอินสแตนซ์ $autoHashPasswordAttributes
เป็น true
:
ผู้ใช้คลาสขยาย LaravelArdentArdentArdent { $passwordAttributes คงที่สาธารณะ = array ('รหัสผ่าน'); สาธารณะ $autoHashPasswordAttributes = จริง; -
Ardent จะแทนที่แอตทริบิวต์รหัสผ่านแบบข้อความธรรมดาด้วยการตรวจสอบแฮชที่ปลอดภัยโดยอัตโนมัติและบันทึกลงในฐานข้อมูล ใช้เมธอด Laravel Hash::make()
ภายในเพื่อสร้างแฮช หมายเหตุ: ขอแนะนำให้ใช้แอตทริบิวต์ $hidden
ของ Eloquent เพื่อที่รหัสผ่าน แม้จะถูกแฮชแล้ว ก็จะไม่หลุดออกมาง่ายๆ หากคุณกำลังสร้าง API หรือที่คล้ายกัน :)
ในกรณีที่คุณใช้ Ardent แบบสแตนด์อโลน คุณสามารถใช้ Ardent::$hasher
เพื่อตรวจสอบค่าของฟิลด์ได้ โดยใช้ User::$hasher->check($given_password, $user->password)
Ardent สามารถช่วยเหลือคุณด้วยการอัปเดตที่ไม่ซ้ำใคร ตามเอกสาร Laravel เมื่อคุณอัปเดต (และตรวจสอบ) ฟิลด์ด้วยกฎเฉพาะ คุณจะต้องส่ง ID เฉพาะของเรกคอร์ดที่คุณกำลังอัปเดต หากไม่ผ่าน ID นี้ การตรวจสอบจะล้มเหลวเนื่องจาก Validator ของ Laravel จะคิดว่าบันทึกนี้ซ้ำกัน
จากเอกสาร Laravel :
'email' => 'unique:users,email,10'
ในอดีต โปรแกรมเมอร์ต้องจัดการการส่ง ID และการเปลี่ยนแปลงชุดกฎด้วยตนเองเพื่อรวม ID ในขณะรันไทม์ ไม่เช่นนั้นกับ Ardent เพียงตั้งกฎของคุณด้วย unique
ฟังก์ชันการโทร updateUniques
แล้ว Ardent จะจัดการส่วนที่เหลือเอง
ในโมเดลเพิ่มเติมของคุณให้กำหนดกฎของคุณ
$rules สาธารณะ = array( 'email' => 'required|email|unique', 'password' => 'required|between:4,20|confirmed', 'password_confirmation' => 'between:4,20', -
ในคอนโทรลเลอร์ของคุณ เมื่อคุณต้องการอัปเดต เพียงโทร
$model->updateUniques();
หากจำเป็น คุณสามารถส่งกฎรันไทม์ไปยัง updateUniques
ได้ ไม่เช่นนั้นจะใช้กฎคงที่ที่โมเดลของคุณมอบให้
โปรดทราบว่าในตัวอย่างกฎข้างต้น เราไม่ได้บอก Validator ว่าจะใช้ตารางใดหรือแม้แต่ฟิลด์ใดตามที่อธิบายไว้ในเอกสาร Laravel (เช่น unique:users,email,10
) ความกระตือรือร้นฉลาดพอที่จะคิดออก (ขอบคุณผู้ใช้ github @Sylph)