Php 找不到TYPO3控制器类。我在哪里链接它?

Php 找不到TYPO3控制器类。我在哪里链接它?,php,typo3,typo3-9.x,typo3-extensions,Php,Typo3,Typo3 9.x,Typo3 Extensions,我正在为TYPO3 v9.5.9开发一个扩展,并且已经编写了我的所有代码,但是当我尝试使用该扩展时,我收到一条错误消息说 类Secsign\Secsign\Controller\SecsignController不存在。 反射失败 有两种方法可以解决此问题: 1.通过project composer.json加载扩展 为您的自定义扩展创建一个文件夹,我在这里将其命名为Extensions,并将您的所有自定义扩展移动到此文件夹中。您的public/typo3conf/ext/文件夹现在应该只保存

我正在为TYPO3 v9.5.9开发一个扩展,并且已经编写了我的所有代码,但是当我尝试使用该扩展时,我收到一条错误消息说

类Secsign\Secsign\Controller\SecsignController不存在。 反射失败


有两种方法可以解决此问题:

1.通过project composer.json加载扩展 为您的自定义扩展创建一个文件夹,我在这里将其命名为
Extensions
,并将您的所有自定义扩展移动到此文件夹中。您的
public/typo3conf/ext/
文件夹现在应该只保存composer加载的扩展,并且可以随时清除,因为一个简单的
composer i
将带回所有扩展

└── projectRoot
    ├── Extensions
    │   └── secsign
    │       └── Classes
    ├── composer.json
    └── public
        └── typo3conf
            └── ext
                └── secsign(symlink_by_composer)
将其添加到项目生成器中。json:

  "repositories": {
    "0": {
      "type": "composer",
      "url": "https://composer.typo3.org/"
    },
    "1": {
      "type": "path",
      "url": "./Extensions/*",
      "options": {
        "symlink": true
      }
    }
  },

  ...

  "require": {
    "secsign/secsign": "*",
    ...
  },
  "autoload": {
    "psr-4": {
      "Secsign\\Secsign\\": "Classes/"
    }
  },
删除Extensions composer.json中自动加载的第二行

public/Extensions/secsign/composer.json:

  "repositories": {
    "0": {
      "type": "composer",
      "url": "https://composer.typo3.org/"
    },
    "1": {
      "type": "path",
      "url": "./Extensions/*",
      "options": {
        "symlink": true
      }
    }
  },

  ...

  "require": {
    "secsign/secsign": "*",
    ...
  },
  "autoload": {
    "psr-4": {
      "Secsign\\Secsign\\": "Classes/"
    }
  },
现在,composer加载您的项目composer.json,找到您的扩展,将其符号链接到typo3conf/ext/并读取您的扩展composer.json并执行它

将所有Ext加载到项目中:完成所有这些更改后,只需执行
编写器更新
。这将把您的所有第三方扩展加载到
projectRoot/public/typo3conf/ext/
中,并将您的自定义扩展从
secsign->../../../extensions/secsign

添加更多自定义扩展:只需将自定义扩展添加到
扩展
,确保它具有有效的
composer.json
,并将其包含在

composer-req-secsign/one-more-ext
2.将类添加到project composer.json中 将扩展留在原处,不必关心扩展composer.json和 只需将类添加到project composer.json:

  "autoload": {
    "psr-4": {
      "Secsign\\Secsign\\": "htdocs/typo3conf/ext/secsign/Classes/"
    }
  },
现在composer会自动从projects composer.json加载类,扩展composer.json甚至不会执行

最终的
  • 似乎更容易,但有几个理由选择1

  • 有两种方法可以解决此问题:

    1.通过project composer.json加载扩展 为您的自定义扩展创建一个文件夹,我在这里将其命名为
    Extensions
    ,并将您的所有自定义扩展移动到此文件夹中。您的
    public/typo3conf/ext/
    文件夹现在应该只保存composer加载的扩展,并且可以随时清除,因为一个简单的
    composer i
    将带回所有扩展

    └── projectRoot
        ├── Extensions
        │   └── secsign
        │       └── Classes
        ├── composer.json
        └── public
            └── typo3conf
                └── ext
                    └── secsign(symlink_by_composer)
    
    将其添加到项目生成器中。json:

      "repositories": {
        "0": {
          "type": "composer",
          "url": "https://composer.typo3.org/"
        },
        "1": {
          "type": "path",
          "url": "./Extensions/*",
          "options": {
            "symlink": true
          }
        }
      },
    
      ...
    
      "require": {
        "secsign/secsign": "*",
        ...
      },
    
      "autoload": {
        "psr-4": {
          "Secsign\\Secsign\\": "Classes/"
        }
      },
    
    删除Extensions composer.json中自动加载的第二行

    public/Extensions/secsign/composer.json:

      "repositories": {
        "0": {
          "type": "composer",
          "url": "https://composer.typo3.org/"
        },
        "1": {
          "type": "path",
          "url": "./Extensions/*",
          "options": {
            "symlink": true
          }
        }
      },
    
      ...
    
      "require": {
        "secsign/secsign": "*",
        ...
      },
    
      "autoload": {
        "psr-4": {
          "Secsign\\Secsign\\": "Classes/"
        }
      },
    
    现在,composer加载您的项目composer.json,找到您的扩展,将其符号链接到typo3conf/ext/并读取您的扩展composer.json并执行它

    将所有Ext加载到项目中:完成所有这些更改后,只需执行
    编写器更新
    。这将把您的所有第三方扩展加载到
    projectRoot/public/typo3conf/ext/
    中,并将您的自定义扩展从
    secsign->../../../extensions/secsign

    添加更多自定义扩展:只需将自定义扩展添加到
    扩展
    ,确保它具有有效的
    composer.json
    ,并将其包含在

    composer-req-secsign/one-more-ext
    
    2.将类添加到project composer.json中 将扩展留在原处,不必关心扩展composer.json和 只需将类添加到project composer.json:

      "autoload": {
        "psr-4": {
          "Secsign\\Secsign\\": "htdocs/typo3conf/ext/secsign/Classes/"
        }
      },
    
    现在composer会自动从projects composer.json加载类,扩展composer.json甚至不会执行

    最终的
  • 似乎更容易,但有几个理由选择1

  • 你试过刷新系统缓存和重建PHP自动加载信息吗?是的,我已经试过多次了。运气不好。请尝试从命名空间中删除反斜杠。请参阅@jokumer的答案1)不建议使用带有前导反斜杠的
    use
    语句(但无论如何都应该有效)2)你的composer.json看起来怎么样?@GhanshyamBhava我会在我拥有的每一个类中都这样做吗?你是否尝试过刷新系统缓存和重建PHP自动加载信息?是的,我已经尝试过多次了。运气不好。请尝试从命名空间中删除反斜杠。请参阅@jokumer的答案1)不建议使用带有前导反斜杠的
    use
    语句(但无论如何应该可以使用)2)你的composer.json是什么样子的?@GhanshyamBhava在我拥有的每个类中我都必须这样做吗?目前,我的projects composer.json的存储库部分看起来是这样的:`“存储库”:[{“类型”:“编写器”,“url”:“}],`我将如何添加您提到的repositories语句?我似乎无法理解。完成后,如何将扩展加载到TYPO3?@droemmelbert我将TYPO3.org repo添加到上面的示例中。此外,我还向1添加了一个步骤。我实际上是这样做的。通过composer.json加载它成功了。谢谢!此时repomy projects composer.json的sitories部分如下所示:`“存储库”:[{“类型”:“composer”,“url”:“}],`我将如何添加您提到的repositories语句?我似乎无法理解。完成后,如何将扩展加载到TYPO3?@droemmelbert我将TYPO3.org repo添加到上面的示例中。此外,我还向1添加了一个步骤。我确实做到了。通过composer.json加载它成功了。谢谢!