注解 %26 Aspect - 图1
这个图是基于丝路项目的流程逻辑, 并不和下边的类相符, 下边的类是用 Hyperf 原生进行定义的

注解

Class 注解

注解是将一系列的数据进行关联的一种方式
类的注解以及生成的数据(全部)

  1. array(2) {
  2. ["App\Service\AnClass\ClassAllIn"]=>
  3. object(App\Annotation\AnClass)#25 (1) {
  4. ["name"]=>
  5. string(5) "allin"
  6. }
  7. ["App\Service\AnClass\ClassQ"]=>
  8. object(App\Annotation\AnClass)#49 (1) {
  9. ["name"]=>
  10. string(1) "q"
  11. }
  12. }

这里有一个注解类, 两个注解实现类
这里表明注册在 class 中可用, 传入的参数代表可以将参数初始化到 公共变量中, 在变量初始化的时候是进行如此设定的

  1. # file : AbstractAnnotation.php
  2. # 初始化
  3. public function __construct($value = null)
  4. {
  5. if (is_array($value)) {
  6. foreach ($value as $key => $val) {
  7. if (property_exists($this, $key)) {
  8. $this->{$key} = $val;
  9. }
  10. }
  11. }
  12. }
  1. # file : ClassQ.php
  2. # 使用
  3. /**
  4. * @AnClass(name="q")
  5. */
  6. class ClassQ
  7. {
  8. }

注解的传参 : Url : Hyperf

  • 传递主要的单个参数 @DemoAnnotation("value")
  • 传递字符串参数 @DemoAnnotation(key1="value1", key2="value2")
  • 传递数组参数 @DemoAnnotation(key={"value1", "value2"})
    1. /**
    2. * @Annotation
    3. * @Target({"CLASS"})
    4. */
    5. class AnClass extends AbstractAnnotation
    6. {
    7. public string $name = '';
    8. }

    property (属性)

    将属性/方法/定义传参
    1. [
    2. [
    3. ["class"]=> "App\Service\Annotation\PropertyAllIn"
    4. ["property"]=> "actionName"
    5. ["annotation"]=>
    6. object(App\Annotation\AnProperty)#22 (1) {
    7. ["name"]=> "allin"
    8. }
    9. ]
    10. ]

    Method(方法)

    1. [
    2. "App\Annotation\AnMethodByParams"=>
    3. object(App\Annotation\AnMethodByParams)#24 (2) {
    4. ["method"]=> "allin"
    5. ["params"]=> [
    6. [0]=> string(2) "id"
    7. ]
    8. }
    9. ]

    注解的分类

    切面单独独立出来

    _@_Annotation

    注解的标识

    _@_Target

    注解的解析位置 CLASS, METHOD, PROPERTY, ALL

    _@_Constants

    常量数据

    _@_Inject

    标记属性, Hyperf 会自动注入对应的对象和值

    _@_AutoController 以及控制器相关的代码

    路由的注解
    @_Controller : 表明当前类是一个控制器类
    @RequestMapping(path=”index”, methods=”get,post”) : 定义路由访问, 路径是控制器 + 当前定义的 path
    @GetMapping : Get 方法
    @PostMapping : Post
    @PutMapping : Put
    @PatchMapping : Patch 方法(对资源进行部分修改)
    @_DeleteMapping : Delete 删除

    @Controller 生成控制器

    这里出现了一个问题, 等待官方的回复 , 是关于自动生成路径的 https://github.com/hyperf/hyperf/issues/5123

_@_Listener

切面 (Aspect)

通过动态代理等技术实现程序功能的统一维护的一种技术.
使用 Aop 扩展业务逻辑, 并使耦合度降低, 提高程序的可重用性

Socket

@SocketIONamespace(“/“)

socket 命名空间定义, 这里的命名空间和 socket.io 指定的相符, 也可以通过相关的路由来添加

_@_Event

以方法名作为事件名来分发事件, 如果写在控制器中则自动进行方法的映射.