PHP Conference Japan 2024

Yaf_Router 类

(Yaf >=1.0.0)

简介

Yaf_Router 是标准的框架路由器。路由是将 URI 终结点(URI 中基本 URI 之后的部分:参见 Yaf_Request_Abstract::setBaseUri())分解成参数以确定哪个模块、控制器和控制器的哪个操作应接收请求的过程。模块、控制器、操作和其他参数的值被打包到一个 Yaf_Request_Abstract 对象中,然后由 Yaf_Dispatcher 处理。路由只发生一次:当最初接收请求并且在第一个控制器分派之前。Yaf_Router 旨在允许使用纯 PHP 结构实现类似 mod_rewrite 的功能。它非常宽松地基于 Ruby on Rails 路由,并且不需要任何关于 Web 服务器 URL 重写的先验知识。它旨在与单个 Apache mod_rewrite 规则(其中之一)一起使用

示例 #1 Apache 的重写规则

RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css|html)$ index.php
或(首选)

示例 #2 Apache 的重写规则

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
如果使用 Lighttpd,则以下重写规则有效

示例 #3 Lighttpd 的重写规则

url.rewrite-once = (
  ".*\?(.*)$" => "/index.php?$1",
  ".*\.(js|ico|gif|jpg|png|css|html)$" => "$0",
  "" => "/index.php"
)
如果使用 Nginx,请使用以下重写规则

示例 #4 Nginx 的重写规则

server {
  listen ****;
  server_name  yourdomain.com;
  root   document_root;
  index  index.php index.html;

  if (!-e $request_filename) {
    rewrite ^/(.*)  /index.php/$1 last;
  }
}

默认路由

Yaf_Router 预先配置了一个默认路由 Yaf_Route_Static,它将匹配形状为 controller/action 的 URI。此外,模块名称可以作为第一个路径元素指定,允许 URI 采用模块/控制器/操作的形式。最后,它还将默认匹配附加到 URI 的任何其他参数 - 控制器/操作/var1/value1/var2/value2。

注意:

模块名称必须在配置中定义,例如 application.module="Index,Foo,Bar",在这种情况下,只有 index、foo 和 bar 可以被视为模块名称。如果没有配置,则只有一个名为“Index”的模块。

此类路由匹配的一些示例

示例 #5 Yaf_Route_Static(默认路由)示例

// Assuming the following configure:
$conf = array(
   "application" => array(
      "modules" => "Index,Blog",
   ),
);

Controller only:
http://example/news
    controller == news
Action only(when defined yaf.action_prefer=1 in php.ini)
    action  == news
 
Invalid module maps to controller name:
http://example/foo
    controller == foo
 
Module + controller:
http://example/blog/archive
    module     == blog
    controller == archive
 
Module + controller + action:
http://example/blog/archive/list
    module     == blog
    controller == archive
    action     == list
 
Module + controller + action + params:
http://example/blog/archive/list/sort/alpha/date/desc
    module     == blog
    controller == archive
    action     == list
    sort       == alpha
    date       == desc

类概要

class Yaf_Router {
/* 属性 */
protected $_routes;
protected $_current;
/* 方法 */
public __construct()
public addRoute(string $name, Yaf_Route_Abstract $route): bool
public getRoutes(): mixed
public route(Yaf_Request_Abstract $request): bool
}

属性

_routes

已注册的路由栈

_current

在路由阶段之后,这指示用于路由当前请求的路由名称。您可以通过 Yaf_Router::getCurrentRoute() 获取此名称。

目录

添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top