molecular / molecularframework
Requires
- molecular/molecular: 0.2.0
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