Nam 是一个开源的 PHP 路由器。非常小巧、快速且强大,是一个微框架。

v1.0.0 2022-04-14 04:33 UTC

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;
}