ข้ามไปยังเนื้อหา
getnextpdf.com

Enterprise รุ่น

PHPStan

NextPDF Enterprise จัดส่งกฎ PHPStan แบบกำหนดเอง EditionBoundaryRule ที่ตั้งค่าสถานะ use import ซึ่งข้ามขอบเขตของรุ่น Core → Pro → Enterprise มันเป็นการตรวจสอบแบบสแตติกที่หันเข้าหานักพัฒนาซึ่งรายงานการละเมิด มันวิเคราะห์คำสั่ง import และไม่ได้รับประกันความถูกต้องของโค้ดของคุณ

ความสามารถนี้จัดส่งใน NextPDF Enterprise (nextpdf/enterprise) และเปิดใช้งานด้วยซองใบอนุญาตระดับ Enterprise มันเป็นกฎ PHPStan ในเวลาบิลด์ที่ลงทะเบียนผ่านการกำหนดค่า PHPStan ของคุณ จึงทำงานระหว่างการวิเคราะห์แบบสแตติกและไม่มีเส้นทางรันไทม์ เกตใบอนุญาตคือขอบเขตของแพ็กเกจ nextpdf/enterprise โดยไม่มีโค้ดความสามารถต่อฟีเจอร์แยกต่างหาก เปรียบเทียบรุ่นและรับใบอนุญาต

Terminal window
composer require nextpdf/enterprise:^3

ลงทะเบียนกฎในการกำหนดค่า PHPStan ของคุณ:

rules:
- NextPDF\Enterprise\PHPStan\EditionBoundaryRule

กฎตรวจสอบคำสั่ง use แต่ละคำสั่งและเปรียบเทียบ namespace ที่ทำการ import กับคำนำหน้า namespace ของสัญลักษณ์ที่ถูก import มันบังคับใช้ลำดับการพึ่งพาแบบทิศทางเดียว:

  • โค้ด Core (NextPDF\ ยกเว้น sub-namespace ของ Pro และ Enterprise) ต้องไม่ import จาก NextPDF\Pro\* หรือ NextPDF\Enterprise\*
  • โค้ด Pro (NextPDF\Pro\*) ต้องไม่ import จาก NextPDF\Enterprise\*
  • โค้ด Enterprise (NextPDF\Enterprise\*) เป็นระดับชั้นบนสุดและอาจ import จากระดับใดก็ได้

เมื่อ import ข้ามขอบเขต กฎจะรายงานข้อผิดพลาดด้วยตัวระบุ nextpdf.editionBoundaryViolation และข้อความที่ระบุชื่อ namespace ที่ทำการ import คำนำหน้าที่ต้องห้าม และป้ายชื่อรุ่นที่มนุษย์อ่านได้ การตรวจสอบเป็นแบบสแตติกล้วน ๆ คือ มันอ่าน import graph ในเวลาวิเคราะห์

กฎใช้เหตุผลเกี่ยวกับคำสั่ง use ในเวลาวิเคราะห์ ไม่ใช่ในขณะรันไทม์ เพราะขอบเขตของรุ่นเป็นค่าคงที่ทางสถาปัตยกรรมมากกว่าการตัดสินใจในขณะรันไทม์ Core, Pro และ Enterprise จัดส่งเป็นแพ็กเกจแยกกัน ดังนั้นระดับที่ต่ำกว่าต้องไม่พึ่งพาสัญลักษณ์ที่ไม่มีอยู่ในการติดตั้งที่เล็กกว่า การจับ import ที่ข้ามขอบเขตระหว่างการวิเคราะห์แบบสแตติกทำให้บิลด์ล้มเหลวก่อนที่ความผิดพลาดจะถูกจัดส่ง ทางเลือกอื่นแย่กว่า คือ import เดียวกันจะปรากฏขึ้นในภายหลังเป็นข้อผิดพลาด missing-class ที่ร้ายแรงในการปรับใช้แบบ Core เท่านั้น ลำดับถูกกำหนดให้เป็นทิศทางเดียวโดยเจตนา Core → Pro → Enterprise สะท้อนวิธีที่แพ็กเกจ open-core ซ้อนทับกัน Enterprise ยังคงไม่ถูกจำกัดเพราะเป็นระดับชั้นบนสุดและอาจอ้างอิงทุกรุ่นที่อยู่ด้านล่าง

เบื้องหลังการออกแบบ: Open core ไม่มีการล็อกอิน

คลาสความรับผิดชอบ
EditionBoundaryRuleกฎ PHPStan เหนือคำสั่ง use รายงานการละเมิดขอบเขตของรุ่น

กฎนำสัญญา PHPStan Rule มาตรฐานไปใช้เหนือชนิดโหนด Use_ และส่งข้อผิดพลาดภายใต้ตัวระบุ nextpdf.editionBoundaryViolation

# phpstan.neon
includes:
- vendor/nextpdf/enterprise/phpstan.neon.dist
# phpstan.neon
rules:
- NextPDF\Enterprise\PHPStan\EditionBoundaryRule
parameters:
level: 9
paths:
- src

การละเมิดปรากฏในผลลัพธ์ของ PHPStan เช่น การ import Enterprise ภายในโค้ด Core จะถูกรายงานเป็นการละเมิดขอบเขตของรุ่นบนบรรทัด use ที่กระทำผิด ภายใต้ nextpdf.editionBoundaryViolation

  • กฎใช้เหตุผลเกี่ยวกับ namespace ของไฟล์ที่วิเคราะห์และคำนำหน้าของสัญลักษณ์ที่ถูก import โค้ดใน namespace ที่ไม่ใช่ NextPDF\ ไม่ถูกจำกัดโดยกฎนี้
  • namespace ของ Enterprise ไม่ถูกจำกัดตามการออกแบบ กฎไม่เคยตั้งค่าสถานะไฟล์ Enterprise สำหรับการ import Pro หรือ Core
  • กฎวิเคราะห์คำสั่ง use การอ้างอิงคลาสแบบ fully-qualified ที่เขียนแบบ inline โดยไม่มี use อยู่นอกขอบเขตของกฎนี้ ให้ใช้ import เพื่อให้ขอบเขตถูกบังคับใช้
  • การตรวจสอบเป็นแบบสแตติกและให้คำแนะนำ คือ มันรายงานการละเมิดขอบเขต มันไม่ได้พิสูจน์ว่าโปรแกรมของคุณถูกต้องในด้านอื่น

กฎรันต่อคำสั่ง use ระหว่างการวิเคราะห์ PHPStan และทำการเปรียบเทียบคำนำหน้าสตริง ค่าใช้จ่ายของมันเป็นสัดส่วนกับจำนวนคำสั่ง import และเล็กน้อยมากเทียบกับเวลาวิเคราะห์โดยรวม

นี่เป็นกฎการวิเคราะห์แบบสแตติก มันทำงานในเวลาบิลด์ภายใน PHPStan อ่านเฉพาะโครงสร้างของซอร์สโค้ด และไม่มีผลในขณะรันไทม์ต่อ PDF ที่สร้างขึ้น

กฎประมวลผลซอร์สโค้ดในเวลาวิเคราะห์และไม่จัดการเอกสารหรือข้อมูลส่วนบุคคล

การวัดและส่งข้อมูลที่ปลอดภัยและการขัดล้างบันทึก

หัวข้อที่มีชื่อว่า “การวัดและส่งข้อมูลที่ปลอดภัยและการขัดล้างบันทึก”

ผลลัพธ์ของกฎคือการวินิจฉัยของ PHPStan มันมี namespace และชื่อสัญลักษณ์จากโค้ดของคุณเอง ให้ปฏิบัติต่อบันทึกการวิเคราะห์ด้วยความระมัดระวังเช่นเดียวกับซอร์สโค้ดของคุณ

ไม่มีการอ้างความสอดคล้องกับมาตรฐาน นี่เป็นกฎเครื่องมือสำหรับนักพัฒนาที่บังคับใช้ข้อจำกัดทางสถาปัตยกรรมภายใน (การจัดชั้นของรุ่น) ในบิลด์ปลายน้ำ

ไม่เกี่ยวข้อง กฎไม่ได้ทำการดำเนินการทางการเข้ารหัสและไม่มีเส้นทางรันไทม์

ไม่ใช่ส่วนประกอบรันไทม์ จุดประสงค์ของกฎคือการจับความผิดพลาดทางสถาปัตยกรรม — การ import ข้ามขอบเขตของรุ่น — ก่อนที่มันจะถูกจัดส่ง โดยทำให้ขั้นตอนการวิเคราะห์แบบสแตติกล้มเหลว

  • กฎตรวจสอบคำสั่ง use แต่ละคำสั่งและบังคับใช้ลำดับการพึ่งพาแบบทิศทางเดียว คือ Core ต้องไม่ import Pro หรือ Enterprise Pro ต้องไม่ import Enterprise Enterprise อาจ import ระดับใดก็ได้
  • import ที่ข้ามขอบเขตถูกรายงานภายใต้ตัวระบุ nextpdf.editionBoundaryViolation พร้อม namespace ที่ทำการ import และคำนำหน้าที่ต้องห้าม
  • โค้ดใน namespace ที่ไม่ใช่ NextPDF\ ไม่ถูกจำกัดโดยกฎนี้
  • การอ้างอิงคลาสแบบ fully-qualified inline โดยไม่มี use อยู่นอกขอบเขตของกฎนี้ ให้ใช้ import เพื่อให้ขอบเขตถูกบังคับใช้

หน้านี้บันทึกเฉพาะพฤติกรรมที่สังเกตได้จากภายนอกและพื้นผิว API สาธารณะที่รองรับเท่านั้น เส้นทาง namespace ภายใน คลาสตัวช่วย ตารางกลไก ชื่อไฟล์ runbook และคำนำหน้า ticket อยู่นอกขอบเขต

NextPDF Core ไม่ได้จัดส่งกฎ PHPStan ขอบเขตของรุ่น ผู้บริโภคแบบ Core เท่านั้นที่ต้องการให้การจัดชั้นของรุ่นถูกบังคับใช้ในบิลด์ของตนเองต้องเขียนหรือจัดหากฎที่เทียบเท่ามาเอง

NextPDF Pro ไม่ได้จัดส่งกฎ PHPStan ขอบเขตของรุ่น มันเป็นส่วนหนึ่งของแพ็กเกจ nextpdf/enterprise เท่านั้น การปรับใช้แบบ Pro เท่านั้นจะไม่มีส่วนประกอบ Enterprise ให้ลงทะเบียนกฎนี้จาก ดู ภาพรวม Enterprise สำหรับพื้นผิว Enterprise

รายละเอียดกลไกภายในยังคงอยู่ในเอกสารภายในของ source repository และอยู่นอกขอบเขตของคู่มือนี้

นี่เป็นกฎการวิเคราะห์แบบสแตติกในเวลาบิลด์ มันทำงานภายใน PHPStan ระหว่างการวิเคราะห์ อ่านเฉพาะโครงสร้างของซอร์สโค้ด และไม่มีผลในขณะรันไทม์ต่อ PDF ที่สร้างขึ้นหรือต่อบริการที่ปรับใช้ใด ๆ การลงทะเบียนมันและการเลือกระดับ PHPStan เป็นความรับผิดชอบของผู้ผสานการทำงาน

หน้านี้อธิบายกฎการวิเคราะห์แบบสแตติกที่เป็นเครื่องมือสำหรับนักพัฒนา มันไม่ได้รับประกันการปฏิบัติตามข้อกำหนด การรับรอง หรือความถูกต้องเกี่ยวกับโค้ดของคุณ มันรายงานเฉพาะการละเมิดการ import ข้ามขอบเขตของรุ่นและเป็นการให้คำแนะนำ มันไม่ใช่คำแนะนำทางกฎหมาย การตัดสินว่าบิลด์ของคุณเป็นไปตามภาระผูกพันทางสถาปัตยกรรมหรือตามสัญญาของคุณเองหรือไม่เป็นความรับผิดชอบของคุณ