Nano,by Hyperf
Nano 是一款零配置、无骨架、极小化的 Hyperf 发行版,通过 Nano 可以让您仅仅通过 1 个 PHP 文件即可快速搭建一个 Hyperf 应用。
设计理念
Svelte
的作者提出过一个论断:“框架不是用来组织代码的,是用来组织思路的”。而 Nano 最突出的一个优点就是不打断你的思路。Nano 非常擅长于自我声明,几乎不需要了解框架细节,只需要简单读一读代码,就能知道代码的目的。通过极简的代码声明,完成一个完整的 Hyperf 应用。
特性
安装
composer require hyperf/nano
快速开始
<?PHP use Hyperf\Nano\Factory\AppFactory; require_once __DIR__ . '/vendor/autoload.PHP'; $app = AppFactory::create(); $app->get(/,function () { $user = $this->request->input(user',nano); $method = $this->request->getMethod(); return [ message' => "hello {$user}",1)">method' => $method,]; }); $app->run();
启动服务:
简洁如此。
更多示例
路由
$app
集成了 Hyperf 路由器的所有方法。
<?PHP use Hyperf\Nano\Factory\AppFactory; require_once __DIR__ . '/vendor/autoload.PHP'; $app = AppFactory::create(); $app->addGroup('/nano',function () use ($app) { $app->addRoute(['GET','POST'],'/{id:\d+}',function($id) { return '/nano/'.$id; }); $app->put('/{name:.+}',function($name) { return '/nano/'.$name; });}); $app->run();
DI 容器
<?PHP use Hyperf\Nano\ContainerProxy; use Hyperf\Nano\Factory\AppFactory; require_once __DIR__ . '/vendor/autoload.PHP'; class Foo { public function bar() { return 'bar'; }} $app = AppFactory::create(); $app->getContainer()->set(Foo::class,new Foo()); $app->get('/',function () { /** @var ContainerProxy $this */ $foo = $this->get(Foo::class); return $foo->bar();}); $app->run();
所有 $app 管理的闭包回调中,$this 都被绑定到了 Hyperf\Nano\ContainerProxy
上。
中间件
<?PHP use Hyperf\Nano\Factory\AppFactory; require_once __DIR__ . '/vendor/autoload.PHP'; $app = AppFactory::create(); $app->get('/',function () { return $this->request->getAttribute('key'); }); $app->addMiddleware(function ($request,$handler) { $request = $request->withAttribute('key','value'); return $handler->handle($request); }); $app->run();
除了闭包之外,所有 $app->addXXX () 方法还接受类名作为参数。可以传入对应的 Hyperf 类。
异常处理
<?PHP use Hyperf\HttpMessage\Stream\SwooleStream; use Hyperf\Nano\Factory\AppFactory; require_once __DIR__ . '/vendor/autoload.PHP'; $app = AppFactory::create(); $app->get('/',function () { throw new \Exception();}); $app->addExceptionHandler(function ($throwable,$response) { return $response->withStatus('418') ->withBody(new SwooleStream('I\'m a teapot'));}); $app->run();
命令行
<?PHP use Hyperf\Contract\StdoutLoggerInterface; use Hyperf\Nano\Factory\AppFactory; require_once __DIR__ . '/vendor/autoload.PHP'; $app = AppFactory::create(); $app->addCommand('echo',function(){ $this->get(StdoutLoggerInterface::class)->info('A new command called echo!'); }); $app->run();
执行
事件监听
<?PHP use Hyperf\Contract\StdoutLoggerInterface; use Hyperf\Framework\Event\BootApplication; use Hyperf\Nano\Factory\AppFactory; require_once __DIR__ . '/vendor/autoload.PHP'; $app = AppFactory::create(); $app->addListener(BootApplication::class,function($event){ $this->get(StdoutLoggerInterface::class)->info('App started'); }); $app->run();
自定义进程
<?PHP use Hyperf\Contract\StdoutLoggerInterface; use Hyperf\Nano\Factory\AppFactory; require_once __DIR__ . '/vendor/autoload.PHP'; $app = AppFactory::create(); $app->addProcess(function(){ while (true) { sleep(1); $this->get(StdoutLoggerInterface::class)->info('Processing...'); }}); $app->run();
定时任务
<?PHP use Hyperf\Contract\StdoutLoggerInterface; use Hyperf\Nano\Factory\AppFactory; require_once __DIR__ . '/vendor/autoload.PHP'; $app = AppFactory::create(); $app->addCrontab('* * * * * *',function(){ $this->get(StdoutLoggerInterface::class)->info('execute every second!'); }); $app->run();
使用更多 Hyperf 组件
<?PHP use Hyperf\DB\DB; use Hyperf\Nano\Factory\AppFactory; require_once __DIR__ . '/vendor/autoload.PHP'; $app = AppFactory::create(); $app->config([ 'db.default' => [ 'host' => env('DB_HOST','localhost'),'port' => env('DB_PORT',3306),'database' => env('DB_DATABASE','hyperf'),'username' => env('DB_USERNAME','root'),'password' => env('DB_PASSWORD',''),]]); $app->get('/',function(){ return DB::query('SELECT * FROM `user` WHERE gender = ?;',[1]); }); $app->run();
更多学习内容请访问:
腾讯T3-T4标准精品PHP架构师教程目录大全,只要你看完保证薪资上升一个台阶(持续更新)