กรอบการตรวจสอบความถูกต้องของอินพุตที่มีชื่อน่าเบื่อ
การเปลี่ยนแปลง
การตรวจสอบความถูกต้องของอินพุตเป็นงานที่สำคัญในเว็บแอปพลิเคชันใด ๆ แต่ยังคงเป็นงานที่น่าเบื่อมาก สิ่งนี้จะแทนที่การตรวจสอบแบบผสมผสานกับโครงสร้างข้อมูลที่เหมาะสมซึ่งกำหนดอินพุตที่ต้องการและเป็นตัวเลือกอย่างชัดเจน
การออกแบบ reolves รอบแนวคิดของการออกแบบที่ขับเคลื่อนด้วย API ซึ่งจุดสิ้นสุด API แต่ละจุดเป็นวัตถุของตัวเองอย่างไรก็ตามไม่ต้องการรูปแบบนี้อย่างชัดเจน
อินพุตดิบถูกแปลงเป็นข้อมูลที่ปลอดภัยในสองขั้นตอนหลัก:
การแยกวิเคราะห์มีหน้าที่แปลงสตริงอินพุตดิบเป็นอาร์เรย์เชื่อมโยง หากแอปพลิเคชันของคุณมีโครงสร้างที่จะทำเช่นนั้นขั้นตอนนี้สามารถข้ามไปได้ทั้งหมด
การตรวจสอบความถูกต้องเป็นส่วนที่มีประโยชน์มากที่สุดของไลบรารี - การกำหนดชุดของพารามิเตอร์ทางเลือกและจำเป็นและประเภทที่กำหนดและการเปรียบเทียบค่าอินพุตกับข้อมูลจำเพาะ การใช้งานป้องกันไม่ให้ข้อมูลไม่ถูกต้องจากการเผยแพร่ทั้งหมด เป็นไปไม่ได้ที่จะสร้างวัตถุ SafeInput (ซึ่งแอปพลิเคชันของคุณจะใช้) จากข้อมูลที่ไม่ถูกต้อง!
เมื่อเสร็จสิ้นกระบวนการนี้วัตถุ SafeInput จะถูกส่งคืนซึ่งมีข้อมูลตามข้อมูลจำเพาะที่กำหนดโดยวัตถุที่ใช้การ ValidationInterface (ค่าที่ขาดหายไปจะเป็นโมฆะ)
เนื่องจากห้องสมุดนี้มีอยู่เพื่อให้ข้อมูลที่เชื่อถือได้จึงจะป้องกันไม่ให้คุณคาดเดาครั้งที่สอง ตัวอย่างเช่นการใช้ isset หรือ empty ในโครงสร้างข้อมูลจะทำให้เกิดข้อยกเว้น มันเป็นประสบการณ์ของผู้เขียนที่การแสดงไม่สามารถไว้วางใจข้อมูลที่ผ่านการตรวจสอบของคุณคือการต่อต้านรูปแบบและกลิ่นรหัส หากคุณยืนยันที่จะทำเช่นนี้นี่ไม่ใช่เครื่องมือที่เหมาะสมสำหรับคุณ การบังคับให้ความไว้วางใจเช่นนี้มีแนวโน้มที่จะป้องกันไม่ให้เอกสารการขุดแยกออกจากความเป็นจริง
ตัวอย่างพื้นฐานดังนี้:
some_controller_file.php
<?php
// This would be in its own file
use Firehed Input Interfaces ValidationInterface ;
use Firehed Input Containers SafeInput ;
use Firehed Input Objects as O ;
class Endpoint
implements ValidationInterface {
public function getOptionalInputs () {
return [
' bar ' => new O Text (),
' baz ' => ( new O Text ())-> setDefaultValue ( ' my baz ' ),
];
}
public function getRequiredInputs () {
return [
' foo ' => new O Text (),
];
}
public function execute ( SafeInput $ i ) {
// ... do some magic
// $i['foo'] will be a string
// $i['bar'] will be a string or null, since it was optional
// $i['baz'] will be a string or 'my baz', since it was an optional with a default value
}
} index.php
<?php
// This is the core of your Front Controller
use Firehed Input Containers RawInput ;
use Firehed Input Parsers URLEncoded ;
// The endpoint should be detrmined by your router
$ endpoint = new Endpoint ();
// The parser should be determined by the Content-Type header
$ parser = new URLEncoded ();
try {
$ input = ( new RawInput ( " foo=world " ))
-> parse ( $ parser )
-> validate ( $ endpoint );
$ endpoint -> execute ( $ input );
} catch ( Firehed Input Exceptions InputException $ e ) {
// The input contained invalid data
} catch ( Exception $ e ) {
// Do any logging, error responses, etc.
echo $ e ;
}