devbr/router

网站(路由器)访问控制器

0.2.4 2018-01-20 21:37 UTC

README

Latest Stable Version Latest Unstable Version License Total Downloads Monthly Downloads

安装

使用Composer进行简单安装

Composer require devbr/router 

或者,在 "https://github.com/devbr/website" 安装PHP网站的全套基础。

更多信息: https://packagist.org.cn/packages/devbr/router

访问管理

待翻译为英文

安装配置文件(Config\Devbr\Router)后,可以指定对网站或应用访问请求的响应规则。

namespace Config\Devbr;

class Router
{
    function __construct($router)
    {
        $router->respond('get', '/', 'Site\Front::page');
    }
}

这是随Router安装附带的基本文件,可以找到在 "/Config/Devbr/Router.php"(或 [vendor]/devbr/router/Config/Devbr/Router.php 文件夹中)。我们在这个文件中进行应用或网站的访问配置。

为了方便访问配置,建议将 "Config" 文件夹移动到 PHP 应用程序的 "root" 目录,并在您的 composer.json 文件中添加以下内容

...
    "autoload": {
        "Config\\": {"": ".php/Config/"}
    }
...

<< 假设 ".php/" 是您的 PHP 文件夹的回退(或根目录) >>

"respond" 函数,用于根据访问请求添加响应路由,具有以下语法

TODO: review examples and didactics

$router->respond( <type>, <request>, <controller>, [<action>]);
        
    <type>:       A string with the following methods: "all", "get", "post", "delete", "put", "patch".
                  Or specify a specific group: "get|post|delete".
                          
    <request>:    String of the requested URI (without site domain).
                        Ex.: "about/me" ==> http://site.com/about/me
            
    <controller>: Class (object) to manage the request.
                  Name must be a complete string, with NAMESPACE + CLASSNAME. 
                        Ex.: "Devbr\User".
                  Alternatively you can use the following format: "controller::action". 
                        Ex.: "Devbr\User::login".
                  The Controller can also be an anonymous function that receives (or not)
                  parameters of the regular expression in <request>.
                        Ex.: $router->respond('get', 
                                              '/(*)/(*)/(*)', 
                                              function($rqst, $params){ 
                                                  exit( '<pre>'.print_r($params, true));
                                              }
                                             );
                    -- If you request "http://site.com/test/me/now", print on the screen "test me now".
            
    <action>:     Optional to indicate an action. 
                        Ex.: "login".

命名空间

待翻译为英文

NAMESPACE 在您的网站或应用程序的 PHP 文件夹中具有 "root"(回退)。

如果您已经安装了 "https://github.com/devbr/website",则已具有此配置;如果没有,请在您的 composer.json 中添加以下内容

...
    "autoload": {
        "psr-4": {"": ".php/"}
     }
...    

<< 文件夹可以具有其他名称,根据您的选择 >>

在运行Apache的Linux服务器上,root可能位于以下路径

/var/www/site/.php/

--- pode variar conforme a configuração do servidor.

从该文件夹开始,您可以使用相对路径、文件路径来调用任何资源(类)。

让我们考虑(例如)以下路径

/var/www/site/.php/Site/Front/Page.php

要构建此对象,请使用

$page = new Site\Front\Page;

或者,您可以使用 "use" 声明使其更简洁

//Logo abaixo do "namespace":
use Site\Front\Page;
 ....

//Dentro de um método da classe...
$page = new Page;

使用ROUTER

在您的应用程序的前端控制器(通常是 index.php 文件)中,您可以有以下内容

<?php

//Carregando o autoloader do Composer
include '[vendor]/autoload.php';

//Montando e rodando o Router
(new Devbr\Router)->run();

Composer的 "vendor" 文件夹可能位于PHP文件根目录中(例如:".php/")。根据(Config\Devbr\Router)配置,Router将识别请求并调用控制器(和操作),传递参数,按照您为路由定义的配置进行。

您可能希望Router仅识别请求,返回数据以便您在调用控制器之前使用某些 "midware"。为了做到这一点,只需在构建对象时禁用Router的 "autorun" 即可。

<?php

//Carregando o autoloader do Composer
include '[vendor]/autoload.php';

//Montando e rodando o Router
$router = (new Devbr\Router(false))->run();

//For example, only --¬
echo '<b>Controller:</b> '.$router->getController();

//Or ...
echo '<pre>'.print_r($router, true).'</pre>';

CLI(命令行)模式

Router还可以配置为处理命令行(终端)访问。在这种情况下,自动检测 "CLI" 方法。

默认命名空间是 "Devbr\Cli",可以根据您的应用程序需求进行配置。此命名空间旨在与https://github.com/devbr/tools 组件一起使用,以获得一些支持开发的功能。

安装 Devbr\Tools 后,您可以在终端中输入

php index.php Main

其中 "Main" 是此包的主要类,在上面的例子中,它将获取可用函数的 "help"。如果没有安装 Devbr\Tools,则显示 Controller not found!

要创建通过命令行访问的自定义对象,需要在Router配置中指定CLI的类 namespace

namespace Config\Devbr;

class Router
{
    function __construct($router)
    {
        $router->setNamespaceCliPrefix('Cli');
        $router-> ... //demais configurações

在上面的例子中,"Cli" 是您类的根目录(从回退开始)。考虑以下路径来访问您的 "Tests" 类 (我假设 ".php" 是回退,之前已在 composer.json 中配置,如前所述)

/var/www/.php/Cli/Tests.php

打开终端并输入 php index.php Tests::action par1 par2,路由器将挂载类 Cli\Tests,调用方法 action,并将 par1 和 par2 作为参数传递。

如果您输入 php index.php Tests(没有 action)路由器将调用默认的 cliHelp 方法(如果存在)。您应该在 CLI 类中创建此方法,以便向用户显示一些帮助文本。