divengine / div-ways
该软件包尚未发布版本,信息不多。
README
"方式"与"路由"不同。我们需要一个路径来找到特定资源,但我们需要一个方式来做某事。这个库在实现PHP应用的路由和控制时遵循了这一概念。
Ways是一个将SOA的概念适应PHP应用程序架构的类,并试图集成混合系统的各个部分。
使用Ways时,你应该更多地考虑“控制点”,而不是MVC模式中的控制器。当需要时,即按需,根据你的定义,控制点被激活。
<?php ways::listen('sql://...', function($data, $args){ ways::listen('sql://query', function($data){ $pdo = new PDO(); $st = $pdo->prepare($data['query']); $st->execute($data['params']); $data['result'] = $st->fetchAll(PDO::FETCH_OBJ); return $data; }); }); ways::invoke('sql://query', [ 'query' => 'SELECT * FROM cats WHERE name = ?', 'params' => ['Tom'] ]);
在其他平台上,通常在同一个文件中定义所有到驱动器的路由,只定义一次。在Ways中,这不是强制性的。你可以有一个初始控制点,并根据调用的URI转到另一个控制点X,其中定义了路由,从而在需要时形成路径,从而提高应用程序的性能。URI的结构可能表明Ways允许控制点的分层结构,但实际上它可以创建整个图结构。
首先调用一个URI,来自HTTP或CLI。但在你的代码中,你可以调用任何URI
此外,一个控制点可能需要另一个控制点之前的执行。你还可以实现事件或钩子,这样你可以在另一个控制点之前或之后执行一个控制点,而后者不知道前者存在。这些灵活性对于例如插件架构是有效的。
控制点可以交互,这意味着将流程重定向到另一个控制点,直接调用控制点,交换数据和URL参数,处理屏幕输出等。
此外,你可以为控制点的执行建立规则。
<?php ways::rule('is-monday', function(){ return date('D') === 'Mon'; }); ways::listen('*', function (){ echo 'Today is Monday !!!'; }, [ways::PROPERTY_RULES => ['is-monday']]);
Ways不仅适用于Web,也适用于命令行应用程序。Ways仅在一个类、一个文件中实现。这允许快速启动和与其他平台的轻松适配。
文档
https://github.com/divengine/ways/wiki
安装
使用composer...
composer require divengine/ways
没有composer,下载类并...
include "path/to/divengine/ways.php";
基本用法
<?php // arbitrary location for software's packages define('PACKAGES', 'path/to/app/'); use divengine\ways; // ways with closure ways::listen("get://home", function($data){ echo "Hello {$data['user']}"; }, "home"); // add a hook ways::hook(DIV_WAYS_BEFORE_RUN, "home", function($data){ $data['user'] = "Peter"; }); // listen... $data = ways::bootstrap('_url', 'home');
调用静态方法
app/control/Home.php
<?php #id = home #listen = /home class Home { static function Run() { echo "Hello world"; } static function About() { echo "About us"; } #listen@Contact = get://about static function Contact() { echo "Contact us"; } }
index.php
<?php // register a controller with the default static method ::Run() ways::register("app/control/Home.php"); // route to another static method ([controllerID]@[method]) ways::listen("/about", "home@About"); // route to closure ways::listen("/sayMeHello/{name}", function($data, $args) { echo "Hello {$args['name']}"; }); // hook on the fly ways::hook(DIV_WAYS_BEFORE_RUN, ways::listen("/tests/...", function(){ ways::listen("/tests/1", function(){ echo "This is the test 1"; }); ways::listen("/tests/2", function(){ echo "This is the test 2"; }); if (ways::match("/tests/3")) { echo "This is the test 3"; } ways::bootstrap(); }), function(){ if (!isset($_SESSION['user'])) { echo "You are not a tester"; return false; } return true; }); // route to a static method ways::bootstrap("_url", "home");
.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^((?s).*)$ index.php?_url=/$1 [QSA,L]
CLI应用程序
<?php // say me hello // $ php one_script.php hello Peter ways::listen("/hello/{name}", function ($data = [], $args = []) { echo "Hello {$args['name']}\n"; });
获取控制器属性
<?php $property = "This is a property value"; ways::listen("/", function ($data = [], $args = [], $properties = []) { echo "Controller ID = " . $properties['id'] . "\n"; echo "A controller property = " . $properties['myProperty']; }, [ 'myProperty' => $property, ]);
享受!
--
@rafageist
Eng. Rafa Rodriguez