Zend Framework - การกำหนดเส้นทาง
แผนที่เส้นทาง Request URIเป็นวิธีการเฉพาะของคอนโทรลเลอร์ ในบทนี้เราจะดูวิธีการใช้งานเส้นทางใน Zend Framework
โดยทั่วไป URI ใด ๆ มีสามส่วน -
- ส่วนชื่อโฮสต์
- ส่วนเส้นทางและ
- กลุ่มการค้นหา
ตัวอย่างเช่นใน URI / URL - http://www.example.com/index?q=data, www.example.com คือกลุ่มชื่อโฮสต์ index คือกลุ่มเส้นทางและ q=dataคือกลุ่มข้อความค้นหา โดยทั่วไปการกำหนดเส้นทางจะตรวจสอบไฟล์Page segmentกับชุดของข้อ จำกัด หากข้อ จำกัด ใด ๆ ตรงกันก็จะส่งกลับชุดของค่า หนึ่งในค่าหลักคือตัวควบคุม
การกำหนดเส้นทางยังตรวจสอบเซ็กเมนต์โฮสต์เซ็กเมนต์การค้นหาขอวิธี HTTP ขอส่วนหัว HTTP ฯลฯ ในบางสถานการณ์
เส้นทางและ RouteStack
เส้นทางเป็นวัตถุหลักในการกำหนดเส้นทาง Zend Framework มีอินเทอร์เฟซพิเศษสำหรับออบเจ็กต์เส้นทางRouteInterface. ออบเจ็กต์เส้นทางทั้งหมดต้องใช้ RouteInterface รายชื่อทั้งหมดของ RouteInterface มีดังต่อไปนี้ -
namespace Zend\Mvc\Router;
use Zend\Stdlib\RequestInterface as Request;
interface RouteInterface {
public static function factory(array $options = []); public function match(Request $request);
public function assemble(array $params = [], array $options = []);
}
วิธีการหลักคือ match. วิธีการจับคู่นี้จะตรวจสอบคำขอที่ระบุกับข้อ จำกัด ที่กำหนดไว้ในนั้น หากพบรายการที่ตรงกันจะส่งกลับค่าRouteMatchวัตถุ. ออบเจ็กต์ RouteMatch นี้ให้รายละเอียดของคำร้องขอที่ตรงกันเป็นพารามิเตอร์ พารามิเตอร์เหล่านี้สามารถดึงออกมาได้RouteObject ใช้ getParams วิธี.
รายชื่อ RouteObject ที่สมบูรณ์มีดังนี้ -
namespace Zend\Mvc\Router;
class RouteMatch {
public function __construct(array $params); public function setMatchedRouteName($name);
public function getMatchedRouteName();
public function setParam($name, $value);
public function getParams();
public function getParam($name, $default = null);
}
โดยทั่วไปแอปพลิเคชัน MVC ทั่วไปมีหลายเส้นทาง แต่ละเส้นทางนี้จะได้รับการประมวลผลตามลำดับ LIFO และจะมีการจับคู่และส่งคืนเส้นทางเดียว หากไม่มีเส้นทางที่ตรงกัน / ส่งคืนแอปพลิเคชันจะแสดงข้อผิดพลาด“ ไม่พบหน้า” Zend Framework มีอินเทอร์เฟซสำหรับประมวลผลเส้นทางRouteStackInterface. RouteStackInterface นี้มีตัวเลือกในการเพิ่ม / ลบเส้นทาง
รายการทั้งหมดของ RouteStackInterface มีดังต่อไปนี้ -
namespace Zend\Mvc\Router;
interface RouteStackInterface extends RouteInterface {
public function addRoute($name, $route, $priority = null); public function addRoutes(array $routes);
public function removeRoute($name); public function setRoutes(array $routes);
}
Zend framework มีการใช้งาน RouteStack อินเทอร์เฟซและมีดังนี้ -
- SimpleRouteStack
- TreeRouteStack
ประเภทของเส้นทาง
Zend framework มีออบเจ็กต์เส้นทางสำเร็จรูปจำนวนมากสำหรับทุกสถานการณ์ภายใต้เนมสเปซ "Zend \ Mvc \ Router \ Http" เพียงพอที่จะเลือกและใช้ออบเจ็กต์เส้นทางที่เหมาะสมสำหรับสถานการณ์ที่กำหนด
เส้นทางที่มีดังต่อไปนี้ -
Hostname - ใช้เพื่อจับคู่ส่วนโฮสต์ของ URI
Literal - ใช้เพื่อจับคู่ URI ที่แน่นอน
Method - ใช้เพื่อจับคู่วิธี HTTP ของคำขอที่เข้ามา
Part - ใช้เพื่อจับคู่ส่วนของส่วนเส้นทาง URI โดยใช้ตรรกะที่กำหนดเอง
Regex - ใช้เพื่อจับคู่ส่วนเส้นทาง URI ตามรูปแบบ Regex
Schema - ใช้เพื่อจับคู่ URI Schema เช่น http, https เป็นต้น
Segment - ใช้เพื่อจับคู่เส้นทาง URI โดยแบ่งออกเป็นหลายส่วน
ให้เราดูวิธีการเขียนตัวอักษรและเส้นทางส่วนที่ใช้บ่อยที่สุด โดยปกติเส้นทางจะระบุไว้ในไฟล์คอนฟิกูเรชันของแต่ละโมดูล -module.config.php.
เส้นทางที่แท้จริง
โดยปกติเส้นทางจะถูกสอบถามตามลำดับ LIFO เส้นทาง Literal ใช้สำหรับการจับคู่เส้นทาง URI
มีการกำหนดดังที่แสดงด้านล่าง -
$route = Literal::factory(array(
'route' => '/path',
'defaults' => array('controller' => 'Application\Controller\IndexController',
'action' => 'index',),
));
เส้นทางข้างต้นตรงกับ /path ใน url คำขอและส่งคืน index เป็น action และ IndexController เป็นตัวควบคุม
เส้นทางกลุ่ม
เส้นทางแบบแบ่งกลุ่มจะใช้เมื่อใดก็ตามที่ URL ของคุณควรมีพารามิเตอร์ตัวแปร
มีการอธิบายไว้ด้านล่าง -
$route = Segment::factory(array(
'route' => '/:controller[/:action]',
'constraints' => array(
'controller' => '[a-zA-Z][a-zA-Z0-9_-]+',
'action' => '[a-zA-Z][a-zA-Z0-9_-]+',
),
'defaults' => array(
'controller' => 'Application\Controller\IndexController',
'action' => 'index',),
));
ในที่นี้กลุ่มจะแสดงด้วยเครื่องหมายจุดคู่และตามด้วยอักขระที่เป็นตัวเลขและตัวอักษร หากคุณเก็บเซ็กเมนต์ไว้เป็นทางเลือกก็จะปิดด้วยวงเล็บ แต่ละส่วนอาจมีข้อ จำกัด ที่เกี่ยวข้อง ข้อ จำกัด แต่ละข้อเป็นนิพจน์ทั่วไป
การกำหนดค่าเส้นทางในโมดูลการสอน
ให้เราเพิ่มเส้นทางเซ็กเมนต์ในโมดูลการสอนของเรา อัปเดตไฟล์การกำหนดค่าโมดูลการสอน -module.config.php สามารถดูได้ที่ myapp/module/Tutorial/config.
<?php
namespace Tutorial;
use Zend\ServiceManager\Factory\InvokableFactory;
use Zend\Router\Http\Segment;
return [
'controllers' => [
'factories' => [
Controller\TutorialController::class => InvokableFactory::class,
],
],
'router' => [
'routes' => [
'tutorial' => [
'type' => Segment::class,
'options' => [
'route' => '/tutorial[/:action[/:id]]',
'constraints' => [
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
],
'defaults' => [
'controller' => Controller\TutorialController::class,
'action' => 'index',
],
],
],
],
],
'view_manager' => [
'template_path_stack' => ['tutorial' => __DIR__ . '/../view',],
],
];
เราได้เพิ่มเส้นทางสำหรับไฟล์ Tutorialโมดูล. เราเป็นเพียงขั้นตอนเดียวในการจบโมดูลการสอนของเรา เราจำเป็นต้องเพิ่มView สำหรับโมดูลของเราซึ่งเราจะเรียนรู้ในบทต่อไป