devbr / router
网站(路由器)访问控制器
Requires
- php: >=5.6
README
安装
使用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 类中创建此方法,以便向用户显示一些帮助文本。