Nano v1.0 发布!一个 PHP 文件搭建 Hyperf 应用

前端之家收集整理的这篇文章主要介绍了Nano v1.0 发布!一个 PHP 文件搭建 Hyperf 应用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Nano,by Hyperf

Nano 是一款零配置、无骨架、极小化的 Hyperf 发行版,通过 Nano 可以让您仅仅通过 1 个 PHP 文件即可快速搭建一个 Hyperf 应用。

设计理念

Svelte 的作者提出过一个论断:“框架不是用来组织代码的,是用来组织思路的”。而 Nano 最突出的一个优点就是不打断你的思路。Nano 非常擅长于自我声明,几乎不需要了解框架细节,只需要简单读一读代码,就能知道代码的目的。通过极简的代码声明,完成一个完整的 Hyperf 应用。

特性

  • 无骨架
  • 零配置
  • 快速启动
  • 闭包风格
  • 支持注解外的全部 Hyperf 功能
  • 兼容全部 Hyperf 组件
  • Phar 友好

安装

composer require hyperf/nano

快速开始

创建一个 PHP 文件,如 index.PHP 如下:

<?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();

 

启动服务:

PHP index.PHP start

  

简洁如此。

 

更多示例

路由

$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 index.PHP echo

  

事件监听

<?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架构师教程目录大全,只要你看完保证薪资上升一个台阶(持续更新)

 

猜你在找的PHP相关文章