macaw

Simple PHP router

  • 所有者: noahbuscher/macaw
  • 平台:
  • 许可证: MIT License
  • 分类:
  • 主题:
  • 喜欢:
    0
      比较:

Github星跟踪图

Macaw

Macaw is a simple, open source PHP router. It's super small (~150 LOC), fast, and has some great annotated source code. This class allows you to just throw it into your project and start using it immediately.

Install

If you have Composer, just include Macaw as a project dependency in your composer.json. If you don't just install it by downloading the .ZIP file and extracting it to your project directory.

require: {
    "noahbuscher/macaw": "dev-master"
}

Examples

First, use the Macaw namespace:

use \NoahBuscher\Macaw\Macaw;

Macaw is not an object, so you can just make direct operations to the class. Here's the Hello World:

Macaw::get('/', function() {
  echo 'Hello world!';
});

Macaw::dispatch();

Macaw also supports lambda URIs, such as:

Macaw::get('/(:any)', function($slug) {
  echo 'The slug is: ' . $slug;
});

Macaw::dispatch();

You can also make requests for HTTP methods in Macaw, so you could also do:

Macaw::get('/', function() {
  echo 'I'm a GET request!';
});

Macaw::post('/', function() {
  echo 'I'm a POST request!';
});

Macaw::any('/', function() {
  echo 'I can be both a GET and a POST request!';
});

Macaw::dispatch();

Lastly, if there is no route defined for a certain location, you can make Macaw run a custom callback, like:

Macaw::error(function() {
  echo '404 :: Not Found';
});

If you don't specify an error callback, Macaw will just echo 404.

In order to let the server know the URI does not point to a real file, you may need to use one of the example configuration files.

Example passing to a controller instead of a closure

For this demo lets say I have a folder called controllers with a demo.php

index.php:

require('vendor/autoload.php');

use NoahBuscher\Macaw\Macaw;

Macaw::get('/', 'Controllers\demo@index');
Macaw::get('page', 'Controllers\demo@page');
Macaw::get('view/(:num)', 'Controllers\demo@view');

Macaw::dispatch();

demo.php:

<?php
namespace Controllers;

class Demo {

    public function index()
    {
        echo 'home';
    }

    public function page()
    {
        echo 'page';
    }

    public function view($id)
    {
        echo $id;
    }

}

This is with Macaw installed via composer.

composer.json:

{
   "require": {
        "noahbuscher/macaw": "dev-master"
    },
    "autoload": {
        "psr-4": {
            "" : ""
        }
    }
}

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

主要指标

概览
名称与所有者noahbuscher/macaw
主编程语言PHP
编程语言PHP (语言数: 1)
平台
许可证MIT License
所有者活动
创建于2013-12-29 02:21:14
推送于2020-08-06 12:08:09
最后一次提交2020-01-20 13:55:27
发布数0
用户参与
星数892
关注者数62
派生数187
提交数127
已启用问题?
问题数50
打开的问题数15
拉请求数39
打开的拉请求数1
关闭的拉请求数2
项目设置
已启用Wiki?
已存档?
是复刻?
已锁定?
是镜像?
是私有?