grobmeier/cicada

受Ruby Sinatra启发的轻量级PHP框架,用于快速创建Web应用

0.5.1 2017-05-09 12:41 UTC

README

用于创建传统或REST类似Web应用的微型框架。

Latest Stable Version Total Downloads Build Status Coverage Status License

安装

通过Composer将Cicada添加为项目需求

composer require "cicada/cicada=@stable"

使用方法

最小化应用

require '../vendor/autoload.php';

use Cicada\Application;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

$app = new Application();

// Add a route
$app->get('/hello/{name}', function (Application $app, Request $request, $name) {
    return new Response("Hello $name");
});

$app->run();

此应用有一个路由,将匹配以/hello/开头的GET请求,并将匹配的{name}作为$name参数传递给回调函数。

回调函数应该返回一个响应对象。如果返回一个字符串,它将隐式转换为响应。

异常处理

路由回调可能抛出异常。默认情况下,Cicada在这种情况下将返回HTTP 500响应(内部服务器错误)。然而,可以添加异常处理器来拦截特定异常并返回适当的响应。

例如,如果您想捕获自定义的NotImplementedException并返回自定义错误信息

$app->exception(function (NotImplementedException $ex) {
    $msg = "Dreadfully sorry, old chap, but tis' not implemented yet.";
    return new Response($msg, Response::HTTP_INTERNAL_SERVER_ERROR);
});

传递给$app->exception()的回调函数必须有一个参数,并且该参数必须有一个表示要处理的异常类的类类型提示。

可以指定多个异常处理器,并且它们将按照指定的顺序尝试。

$app->exception(function (SomeException $ex) {
    return new Response("Arrrghhhhh", Response::HTTP_INTERNAL_SERVER_ERROR);
});


$app->exception(function (OtherException $ex) {
    return new Response("FFFFUUUUUUU...", Response::HTTP_INTERNAL_SERVER_ERROR);
});

// If all else fails, this will catch any exceptions
$app->exception(function (Exception $ex) {
    $msg ="Something went wrong. The incident has been logged and our code monkeys are on it.";
    return new Response($msg, Response::HTTP_INTERNAL_SERVER_ERROR);
});