molecular/molecularframework

此包的最新版本(0.2.1.1)没有可用的许可信息。

0.2.1.1 2017-09-20 23:14 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:20:03 UTC


README

Sobre

Molecular是一个极轻量级且极简主义的框架,仅包含项目启动所必需的内容,没有外部包的依赖。该框架完全以性能为导向,尽可能减少对应用服务器的开销,使得该框架成为创建API和微服务的优秀选择。

创建新项目

要创建新项目,只需使用composer,通过以下命令:

composer create-project --prefer-dist molecular/molecularframework MyAwesomeAPI

路由

Molecular已经包含一个路由模块,能够根据REST标准或自定义方法注册路由,将路由与匿名函数或控制器的函数关联。

为匿名函数创建路由
route()->get("/",function(){
   return 'is alive =)';
});
为控制器方法创建路由
route()->get('/index','\App\Controller\HomeController@index');
请求方法

可以创建任何REST标准方法或自定义方法的路由。

route()->get('/get','\App\Controller\HomeController@get');
route()->post('/post','\App\Controller\HomeController@post');
route()->put('/put','\App\Controller\HomeController@put');
route()->delete('/delete','\App\Controller\HomeController@delete');
route()->option('/option','\App\Controller\HomeController@option');
route()->path('/path','\App\Controller\HomeController@path');
route()->head('/head','\App\Controller\HomeController@head');
route()->any('/any','\App\Controller\HomeController@any');

自定义方法

route()->custom('CUSTOM','/custom','\App\Controller\HomeController@custom');
route()->custom(['FOO','BAR'],'/customArray','\App\Controller\HomeController@customArray');

路由组

路由组允许中间件和路由前缀在属于同一组的所有路由之间共享。

路由组示例

route()->group('api', function ($group) {
    
    /** @var \Molecular\Routes\RouteDispacher $group */
    
    $group->get('get', function () {
        return 'responde';
    });
    
    $group->get('/get','\App\Controller\HomeController@get');
});

中间件

Molecular的中间件类似于标准装饰器,通过命令next将前一个中间件的输出传递给下一个中间件,最后中间件响应后,所有中间件的调用都从后往前返回,以便在执行后进行任何处理。
一个中间件必须强制实现接口\Molecular\Routes\Middleware\Middleware
添加foo到有效负载之前和bar到有效负载之后的中间件示例

use Molecular\Http\Request;
use Molecular\Http\Response;
use Molecular\Routes\Middleware\Middleware;

class FooMiddleware extends Middleware
{

    public function handle(Request $request, Response $response)
    {
        $response->setResponseContent('foo');
        $this->next($request,$response);
        $response->setResponseContent('bar');
    }
}

将中间件添加到路由或路由组

可以将中间件添加到任何路由或路由组。将中间件添加到路由

route()->get('/get','\App\Controller\HomeController@get',['middleware'=>[FooMiddleware::class]]);

同样,也可以将中间件添加到路由组,这样组内的所有路由都将受到中间件的影响

route()->group('api', function ($group) {
    
    /** @var \Molecular\Routes\RouteDispacher $group */
    
    $group->get('get', function () {
        return 'responde';
    });
    
    $group->get('/get','\App\Controller\HomeController@get');
},['middleware'=>[FooMiddleware::class]]);

控制器

控制器不需要任何特殊类即可运行,它只是路由的执行点。目前,在构建新控制器时,没有注入依赖的类型,因此建议在构造函数中创建依赖项而不是注入它们。控制器必须返回一个字符串或实现了__toString方法的对象,如果返回的是视图,那么它已经实现了__toString方法。

use App\Model\HomeModel;

class HomeController
{
    public function index(){
        $model = new HomeModel();
        $model->work = "it's Work";
        return  view('home.php',['model'=>$model]);
    }

}

解析

Molecular有一个内部库,可以通过resolve方法解决类的创建。可以通过传递类的路径来调用方法,方法返回实例化的类,除非对象创建时某个项目没有默认值。

class Bar
{
    public $bar;
    public function __construct($bar = 10){
        $this->bar = $bar;
    }
}

class Foo
{
    public $bar;
    public function __construct(Bar $bar){
        $this->bar = $bar;
    }
}

$foo = resolve(Foo::class);
echo $foo->bar->bar; // 10

如果正在创建的类在其构造函数的属性中没有任何类型,或者没有默认值,创建将引发异常。

class invalidclass
{
    public function __construct($bar){
        $this->bar = $bar;
    }
}
$foo = resolve(invalidclass::class); //Exception