当前位置:   article > 正文

hyperf自定义注解类_Nano v1.0 发布!一个 PHP 文件搭建 Hyperf 应用

hyperf require_once

Nano, by Hyperf

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

设计理念

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

特性

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

安装

composer require hyperf/nano

快速开始

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

  1. <?php
  2. use HyperfNanoFactoryAppFactory;
  3. require_once __DIR__ . '/vendor/autoload.php';
  4. $app = AppFactory::create();
  5. $app->get('/', function () {
  6. $user = $this->request->input('user', 'nano');
  7. $method = $this->request->getMethod();
  8. return [ 'message' => "hello {$user}", 'method' => $method, ];
  9. });
  10. $app->run();

启动服务:

php index.php start

简洁如此。

更多示例

路由

$app 集成了 Hyperf 路由器的所有方法。

  1. <?php
  2. use HyperfNanoFactoryAppFactory;
  3. require_once __DIR__ . '/vendor/autoload.php';
  4. $app = AppFactory::create();
  5. $app->addGroup('/nano', function () use ($app) {
  6. $app->addRoute(['GET', 'POST'], '/{id:d+}', function($id) {
  7. return '/nano/'.$id;
  8. }); $app->put('/{name:.+}', function($name) {
  9. return '/nano/'.$name;
  10. });});
  11. $app->run();

DI 容器

  1. <?php
  2. use HyperfNanoContainerProxy;
  3. use HyperfNanoFactoryAppFactory;
  4. require_once __DIR__ . '/vendor/autoload.php';
  5. class Foo {
  6. public function bar() {
  7. return 'bar'; }}
  8. $app = AppFactory::create();
  9. $app->getContainer()->set(Foo::class, new Foo());
  10. $app->get('/', function () {
  11. /** @var ContainerProxy $this */ $foo = $this->get(Foo::class);
  12. return $foo->bar();});
  13. $app->run();

所有 $app 管理的闭包回调中,$this 都被绑定到了 HyperfNanoContainerProxy 上。

中间件

  1. <?php
  2. use HyperfNanoFactoryAppFactory;
  3. require_once __DIR__ . '/vendor/autoload.php';
  4. $app = AppFactory::create();
  5. $app->get('/', function () {
  6. return $this->request->getAttribute('key');
  7. });
  8. $app->addMiddleware(function ($request, $handler) {
  9. $request = $request->withAttribute('key', 'value');
  10. return $handler->handle($request);
  11. });
  12. $app->run();

除了闭包之外,所有 $app->addXXX () 方法还接受类名作为参数。可以传入对应的 Hyperf 类。

异常处理

  1. <?php
  2. use HyperfHttpMessageStreamSwooleStream;
  3. use HyperfNanoFactoryAppFactory;
  4. require_once __DIR__ . '/vendor/autoload.php';
  5. $app = AppFactory::create();
  6. $app->get('/', function () {
  7. throw new Exception();});
  8. $app->addExceptionHandler(function ($throwable, $response) {
  9. return $response->withStatus('418')
  10. ->withBody(new SwooleStream('I'm a teapot'));});
  11. $app->run();

命令行

  1. <?php
  2. use HyperfContractStdoutLoggerInterface;
  3. use HyperfNanoFactoryAppFactory;
  4. require_once __DIR__ . '/vendor/autoload.php';
  5. $app = AppFactory::create();
  6. $app->addCommand('echo', function(){
  7. $this->get(StdoutLoggerInterface::class)->info('A new command called echo!');
  8. });
  9. $app->run();

执行

php index.php echo

事件监听

  1. <?php
  2. use HyperfContractStdoutLoggerInterface;
  3. use HyperfFrameworkEventBootApplication;
  4. use HyperfNanoFactoryAppFactory;
  5. require_once __DIR__ . '/vendor/autoload.php';
  6. $app = AppFactory::create();
  7. $app->addListener(BootApplication::class, function($event){
  8. $this->get(StdoutLoggerInterface::class)->info('App started');
  9. });
  10. $app->run();

自定义进程

  1. <?php
  2. use HyperfContractStdoutLoggerInterface;
  3. use HyperfNanoFactoryAppFactory;
  4. require_once __DIR__ . '/vendor/autoload.php';
  5. $app = AppFactory::create();
  6. $app->addProcess(function(){
  7. while (true) {
  8. sleep(1);
  9. $this->get(StdoutLoggerInterface::class)->info('Processing...');
  10. }});
  11. $app->run();

定时任务

  1. <?php
  2. use HyperfContractStdoutLoggerInterface;
  3. use HyperfNanoFactoryAppFactory;
  4. require_once __DIR__ . '/vendor/autoload.php';
  5. $app = AppFactory::create();
  6. $app->addCrontab('* * * * * *', function(){
  7. $this->get(StdoutLoggerInterface::class)->info('execute every second!');
  8. });
  9. $app->run();

使用更多 Hyperf 组件

  1. <?php
  2. use HyperfDBDB;
  3. use HyperfNanoFactoryAppFactory;
  4. require_once __DIR__ . '/vendor/autoload.php';
  5. $app = AppFactory::create();
  6. $app->config([
  7. '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', ''), ]]);
  8. $app->get('/', function(){
  9. return DB::query('SELECT * FROM `user` WHERE gender = ?;', [1]);
  10. });
  11. $app->run();

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

更多学习内容请访问:

八重樱:腾讯T3-T4标准精品PHP架构师教程目录大全,只要你看完保证薪资上升一个台阶(持续更新)​zhuanlan.zhihu.com
3376efeabc8ee034154569dc0745ac2a.png

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要的可以加入我的官方群点击此处。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/548755
推荐阅读
相关标签
  

闽ICP备14008679号