sigareng / nam
Nam 是一个开源的 PHP 路由器。非常小巧、快速且强大,是一个微框架。
v1.0.0
2022-04-14 04:33 UTC
Requires
- php: >=7.2
This package is auto-updated.
Last update: 2024-09-14 11:47:10 UTC
README
Nam 是一个开源的 PHP 路由器。非常小巧、快速且强大。微框架
安装
只需复制,将 nam.php 拷贝到目录中
wget https://raw.githubusercontent.com/sigareng/nam/master/nam.php
如果你有 Composer,只需在项目的 composer.json
中将 Nam 添加为依赖项
require: {
"sigareng/nam": "dev-master"
}
或使用命令行
composer require sigareng/nam:dev-master
使用的例子
首先,使用 use
语句引入 sigareng\Nam
命名空间
use sigareng\Nam\Nam;
如果克隆了子文件夹,别忘了调用
Nam::setbase('<your path>');
Nam 不是一个对象,所以你可以直接对类进行操作。以下是一个 Hello World 示例
Nam::get('/', function() { echo 'Hello world!'; }); Nam::dispatch();
如下所示
index.php
require __DIR__.'/nam.php'; use sigareng\Nam\Nam; Nam::get('/', function() { echo 'Hello world!'; }); Nam::dispatch();
使用 composer
require './vendor/autoload.php'; use sigareng\Nam\Nam; Nam::get('/', function() { echo 'Hello world!'; }); Nam::dispatch();
Nam
也支持 lambda URI,例如
(:any) -> [^/]+
(:num) -> [0-9]+
(:all) -> .*
Nam::get('/(:any)', function($slug) { echo 'I get : ' . $slug; }); Nam::dispatch();
你还可以在 Nam 中对 HTTP 方法进行请求,因此你也可以这样做
Nam::get('/', function() { echo 'Im a GET request!'; }); Nam::post('/', function() { echo 'Im a POST request!'; }); Nam::any('/', function() { echo 'I can be both a GET and a POST request!'; }); Nam::dispatch();
视图渲染器
假设的目录结构
.
├── nam.php
├── view
├── head.php
├── body.php
├── footer.php
└── index.php
require __DIR__.'/nam.php'; use Nam\Nam; Nam::get('/', function() { Nam::render('./view/head.php'); Nam::render('./view/body.php'); Nam::render('./view/footer.php'); }); Nam::dispatch();
Nam::get('/(:num)', function($val) { $age['alice']=$val; Nam::render('./hi.php',$age); // echo '<pre>' . print_r(get_defined_vars(), true) . '</pre>'; });
并在 hi.php 中
echo 'hola, age alice is :'.$data['alice'];
在克隆此存储库后,运行
php -S localhost:8080
并在浏览器中转到https://:8080/Example/
错误处理
你可以向异常传递一个消息,该消息将替换 404 页面上的默认消息。
Nam::error(function() { echo '404 :: Not Found'; });
如果你没有指定错误回调,Nam 将只输出 404
。
以正确地直接导向,无需 .php
扩展名,示例 配置文件。
将消息传递到控制器而不是闭包的示例
index.php
require __DIR__.'/nam.php'; use Nam; Nam::get('/', 'Controllers\see@index'); Nam::get('page', 'Controllers\see@page'); Nam::get('view/(:num)', 'Controllers\see@view'); Nam::dispatch();
see.php
<?php namespace Controllers; class Demo { public function index() { echo 'home'; } public function page() { echo 'page'; } public function view($id) { echo $id; } }
非常简单易用
.htaccess(Apache)
RewriteEngine On
RewriteBase /
# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1 [QSA,L]
.htaccess(Nginx)
rewrite ^/(.*)/$ /$1 redirect;
if (!-e $request_filename){
rewrite ^(.*)$ /index.php break;
}