FuelPHP - 路由


路由映射向特定控制器的方法请求 URI。在本章中,我们将详细讨论 FuelPHP 中的路由概念。

配置

路由配置文件位于fuel/app/config/routes.php。默认的routes.php文件定义如下 -

<?php 
   return array ( 
      '_root_'  => 'welcome/index',   // The default route 
      '_404_'   => 'welcome/404',     // The main 404 route 
      'hello(/:name)?' => array('welcome/hello', 'name' => 'hello'), 
   );

这里,_root_是预定义的默认路由,当应用程序请求根路径时,将匹配该路由, / 例如http://localhost:8080/_root_的值是控制器和匹配时要解析的操作。welcome/index解析为Controller_Welcome控制器和action_index操作方法。同样,我们还有以下预留航线。

  • root - 未指定 URI 时的默认路由。

  • 403 - 当发现 HttpNoAccessException 时抛出。

  • 404 - 当找不到页面时返回。

  • 500 - 当发现 HttpServerErrorException 时抛出。

简单路由

将该路由与请求 URI 进行比较。如果找到匹配项,则请求将路由到 URI。简单路由描述如下,

return array ( 
   'about'  => 'site/about', 
   'login' => 'employee/login', 
);

这里,about匹配 http://localhost:8080/about 并解析控制器、Controller_Site 和操作方法、action_about

login匹配 http://localhost:8080/login 并解析控制器 Controller_Login 和操作方法 action_login

高级路由

您可以将任何正则表达式包含到您的路线中。Fuel 支持以下高级路由功能 -

  • :any - 匹配 URI 中该点之后的任何内容,不匹配“无”

  • :everything - 与 :any 类似,但也匹配“nothing”

  • :segment - 这只匹配 URI 中的 1 个段,但该段可以是任何内容

  • :num - 匹配任何数字

  • :alpha - 匹配任何字母字符,包括 UTF-8

  • :alnum - 匹配任何字母数字字符,包括 UTF-8

例如,以下路由匹配 URI http://localhost:8080/hello/FuelPHP并解析控制器、Controller_Welcome和操作action_hello

'hello(/:name)?' => array('welcome/hello', 'name' => 'hello'),

Controller_Welcome中对应的action方法如下,

public function action_hello() { 
   $this->name = Request::active()->param('name', 'World'); 
   $message = "Hello, " . $this->name;  
   echo $message; 
}

在这里,我们使用 Request 类从 URL 中获取名称参数。如果未找到该名称,则我们将使用World作为默认值。我们将在请求响应章节中学习Request类。

结果

欢迎控制器

HTTP 方法 操作

FuelPHP 支持路由来匹配 HTTP 方法前缀操作。以下是基本语法。

class Controller_Employee extends Controller { 
   public function get_index() { 
      // called when the HTTP method is GET. 
   }  
   public function post_index(){ 
      // called when the HTTP method is POST. 
   } 
}

我们可以根据配置文件中的 HTTP 动词将您的 URL 路由到控制器和操作,如下所示。

return array ( 
   // Routes GET /employee to /employee/all and POST /employee to /employee/create 
   ‘employee’ => array(array('GET', new Route(‘employee/all')), array('POST', 
      new Route(‘employee/create'))), 
);