ชื่อเมธอดลงท้ายด้วย Service โดยตามหลัก service จะถูกกำหนดโดยให้ชื่อเมธอดขึ้นต้นด้วยคำว่า get และลงท้ายด้วยคำว่า Service ซึ่งชื่อในรูปแบบ underscore ของเมธอดจะไม่มีคำขึ้นต้นและคำลงท้าย เช่นเมธอด getMailTransportService() เราจะระบุชื่อ service ได้เป็น mail_transport
Introduction to the Symfony Service Container
เราได้พูดถึงแนวคิดโดยทั่วไปของ Dependency Injection ไปแล้ว ซึ่งสองบทความก่อนหน้านี้มีความสำคัญที่จะช่วยให้เข้าใจการทำงาน โดยในบทความนี้เราจะพูดถึงการใช้งาน service container ของ Symfony 2
Dependency Injection Container ใน Symfony 2 ถูกจัดการโดยคลาสที่ชื่อว่า
sfServiceContainer
ซึ่งเป็นคลาสที่มีคุณสมบัติพื้นฐานดังที่เราได้กล่าวมาแล้วในบทความก่อนหน้านี้ใน Symfony จะบอกว่า service ก็คือ object ใด ๆ ที่ถูกจัดการโดย container จากตัวอย่าง
Zend_Mail
เรามีmailer
service และmail_transport
serviceโดยเราจะให้คลาส
Container
extend คลาสsfServiceContainer
โค้ดจะเปลี่ยนแปลงไปดังรูปนี่คือการเปลี่ยนแปลงหลัก ๆ ที่เราได้ทำ
Service
โดยตามหลัก service จะถูกกำหนดโดยให้ชื่อเมธอดขึ้นต้นด้วยคำว่าget
และลงท้ายด้วยคำว่าService
ซึ่งชื่อในรูปแบบ underscore ของเมธอดจะไม่มีคำขึ้นต้นและคำลงท้าย เช่นเมธอดgetMailTransportService()
เราจะระบุชื่อ service ได้เป็นmail_transport
container สามารถใช้อาเรย์เพื่อเข้าถึงค่าพารามิเตอร์
ชื่อ service จะต้องไม่ซ้ำกันและต้องเป็นตัวพิมพ์เล็ก, ตัวเลข, หรือจุด ซึ่งจุดมีประโยชน์ในการระบุ "
namespaces
" ภาย container (เช่นmail.mailer
และmail.transport
)ลองดูการใช้งานคลาส container หลังการปรับปรุงใหม่
การใช้คลาส
sfServiceContainer
จะมีประโยชน์มากเมื่อคุณมีจำนวน Service น้อย ๆ ที่ต้องจัดการ ถึงแม้ว่าคุณจะต้องจัดการงานเหล่านี้ด้วยตัวคุณเองก็ตาม รวมถึงยังเกิด duplicate code มากด้วย เราจึงต้องการวิธีที่ดีนี้ในการจัดการกับ servicesนั้นเป็นเหตุผลว่าทำไม โดยส่วนใหญ่เราถึงไม่ใช้คลาส
sfServiceContainer
โดยตรง ถึงอย่างไรก็ตามสิ่งสำคัญคือต้องใช้เวลาเพื่อที่จะอธิบายมัน เนื่องจากมันเป็นหลักสำคัญของการใช้งาน dependency injection container ของ Symfonyในบทความหน้า เราจะมาดูคลาส sfServiceContainerBuilder ซึ่งจะช่วยลดขึ้นตอนการกำหนด service
source