<?php
public function myAction(Request $request)
{
$repository = $this->container->get('sylius.repository.product');
$products = $repository->createPaginator();
$products->setMaxPerPage(3);
$products->setCurrentPage($request->query->get('page', 1));
// Now you can return products to template and iterate over it to get products from current page.
}
Sylius - Resource Layer
เพื่อให้มีวิธีการที่สอดคล้องและยืดหยุ่นในการจัดการ resource ทั้งหมด โดย “resource” นั้นตามที่เราเข้าใจจะหมายถึงทุก ๆ model ในแอพพลิเคชั่น โดยตัวอย่างของ Sylius resource ได้แก่ “product”, “order”, “tax_category”, “promotion”, “user”, “shipping_method” เป็นต้น
ใน Sylius มี resource อยู่สองประเภท
sylius.*
ตัวอย่างเช่นsylius.product
sylius_resource
resource_name
ในไฟล์config.yml
โดยแนะนำให้ตั้งชื่อตามapp.*
เช่นapp.my_entity
สำหรับระบบการจัดการ Sylius resource ที่อยู่ใน SyliusResourceBundle สามารถใช้ใน Symfony2 project ได้
Services
จะมี 4 services ที่สำคัญในทุก ๆ resource ได้แก่
ในที่นี้จะใช้ “product” resource เป็นตัวอย่าง โดยค่าเริ่มต้นจะแสดงโดยอ็อบเจ็กต์ของคลาสที่ใช้งาน
Sylius\Component\Core\Model\ProductInterface
Factory
Factory services มีความสามารถในการสร้าง new object โดยสามารถใช้งาน service นี้ ได้จาก sylius.factory.product (โค้ดตัวอย่างสำหรับ Product resource)
Note การสร้าง resource ผ่านเมธอดของ factory จะทำให้โค้ดสามารถทดสอบได้มากขึ้นและช่วยให้สามารถเปลี่ยนแปลง model class ได้ง่าย
Manager
Manager services เป็นเพียงชื่อที่เหมาะสมสำหรับ ObjectManager ของ Doctrine โดยสามารถใช้งาน service นี้ได้จาก sylius.manager.product API จะเป็นเหมือนกันและคุณอาจจะคุ้นเคยกับมันแล้ว
Repository
Repository ถูกกำหนดให้เป็น service สำหรับทุก resource และแชร์ API กับ มาตรฐานของ Doctrine โดย
ObjectRepository
มีสองวิธีเพิ่มเติมในการสร้างอินสแตนซ์อ็อบเจ็กต์ใหม่และการใช้ paginatorโดยสามารถใช้ repository service ได้จาก sylius.repository.product
ข้อแนะนำ Feature ที่สำคัญของ repository คือเมธอด
add($resource)
และremove($resource)
โดยเมื่อส่ง argument resource ไป จะเกิดการเพิ่มและลบในทันทีเนื่องจากมีการ flush ภายในโดยวิธีการนี้สามารถใช้เมื่อต้องการดำเนินการกับข้อมูลที่ไม่ต้องการ แต่ถ้าต้องการที่จะดำเนินการ set of data แนะนำให้ใช้การ manager แทน
ทุก ๆ Sylius repository สนับสนุน paginating resource โดยสามารถสร้าง Pagerfanta instance โดยใช้เมทอด
createPaginator
(การแบ่งหน้า)การแบ่งหน้าสามารถใส่เงื่อนไขและเรียงลำดับที่ต้องการ
Controller
Controller เป็น service ที่สำคัญที่สุดสำหรับทุก ๆ resource และกำหนดรูปแบบ CRUD Controller ตามรูปแบบข้างล่าง
จากที่เห็น action เหล่านี้สอดคล้องกับการดำเนินการใน REST API นั่นหมายความว่าทุก Sylius controller สามารถทำงานกับ HTML, JSON, XML ได้ ขึ้นอยู่กับความต้องการใช้
Action ทั้งหมดนี้มีความยืดหยุ่นมากและช่วยให้คุณสามารถใช้เทมเพลตรูปแบบต่าง ๆ วิธีการเก็บข้อมูลของแต่ละ route โดย bundle นี้มึประสิทธิภาพมากและช่วยให้สามารถลงทะเบียน resource ได้ เพื่อให้มองเห็นภาพจึงขอยกตัวอย่าง
การแสดงการตั้งค่า resource ด้วย custom template และ repository method
สร้าง product โดยใช้ custom form และ redirect
source