reinink/roundabout

此包已被废弃且不再维护。未建议替代包。

基于 Symfony2 HttpFoundation 的 RESTful 路由器。

1.0.4 2014-02-25 21:25 UTC

This package is not auto-updated.

Last update: 2020-01-19 15:40:57 UTC


README

基于 Symfony2 HttpFoundation 的 RESTful 路由器。

亮点

  • 极其简单的 API
  • RESTful 支持:GET、POST、PUT & DELETE
  • 基于 Symfony2 HttpFoundation(直接使用即可)
  • 支持闭包、函数和控制器(类)回调
  • 支持使用数组批量导入路由
  • 自定义控制器实例化(用于 IoC 容器集成)

入门

安装

Roundabout 可通过 Composer 获取

{
    "require": {
        "reinink/roundabout": "1.*"
    }
}

设置

<?php

use \Reinink\Roundabout\Router;
use \Symfony\Component\HttpFoundation\Request;

// Include Composer autoloader
require 'vendor/autoload.php';

// Create request object
$request = Request::createFromGlobals();

// Create router
$router = new Router($request);

基本路由

<?php

// Home page
$router->get(
    '/',
    function () {
        // do something
    }
);

// Contact page
$router->get(
    '/contact',
    function () {
        // do something
    }
);

// Process form post
$router->post(
    '/form-submit',
    function () {
        // do something
    }
);

// Secure (HTTPS) page
$router->getSecure(
    '/login',
    function () {
        // do something
    }
);

// PUT request
$router->put(
    '/resource',
    function () {
        // do something
    }
);

// DELETE request
$router->delete(
    '/resource',
    function () {
        // do something
    }
);

更复杂的路由

<?php

// User profile
$router->get(
    '/user/([0-9]+)',
    function ($userId) {
        // do something with $userId
    }
);

// Output image
$router->get(
    '/photo/(xlarge|large|medium|small|xsmall)/([0-9]+)',
    function ($imageSize, $imageId) {
        // do something with $imageSize and $imageId
    }
);

使用控制器类

<?php

// Home page
$router->get('/', 'Controller::index');

// Contact page
$router->get('/contact', 'Controller::contact');

// Process form post
$router->post('/form-submit', 'Controller::process_form');

// Secure (HTTPS) page
$router->getSecure('/login', 'Controller::login');

批量路由定义

<?php

$router->import(
    [
        [
            'path' => '/',
            'method' => 'GET',
            'secure' => false,
            'callback' => 'Controller::index'
        ],
        [
            'path' => '/contact',
            'method' => 'GET',
            'secure' => false,
            'callback' => 'Controller::contact'
        ],
        [
            'path' => '/form-submit',
            'method' => 'POST',
            'secure' => false,
            'callback' => 'Controller::process_form'
        ],
        [
            'path' => '/login',
            'method' => 'GET',
            'secure' => true,
            'callback' => 'Controller::login'
        ]
    ]
);

自定义控制器实例化

默认情况下,Roundabout 会自动实例化控制器类,但可以使用 $instantiation_callback 参数来覆盖此行为。这有助于在需要使用反转控制容器的情况下。

<?php

// Your IoC container
$ioc = new Container;

// Create router
$router = new Router(
    $request,
    function ($class, $method, $parameters) use ($ioc) {

        $controller = $ioc->make($class);

        return call_user_func_array(array($controller, $method), $parameters);
    }
);