【问题标题】:Neos: Routings for Inspector EditorsNeos:检查员编辑的路由
【发布时间】:2023-03-23 00:13:01
【问题描述】:

我尝试创建一个自己的检查器编辑器,它应该能够通过控制器加载数据。为此,我在标题中呈现了一个 LINK 标记——就像 Neos 所做的那样:

<link rel="vendor-package-backend-content" href="http://typo3-neos-1.1.x.dev/vendor.package/backend/content/load />

创建了一个控制器Packages/Application/Vendor.Package/Classes/Vendor/Package/Controller/Backend/ContentController.php

这是文件Configuration/Routes.yaml

-
  name: 'TYPO3 Neos'
  uriPattern: '<TYPO3NeosSubroutes>'
  subRoutes:
    'TYPO3NeosSubroutes':
      package: 'TYPO3.Neos'
      variables:
        'defaultUriSuffix': '.html'

-
  name: 'Vendor Package
  uriPattern: '<VendorPackageSubroutes>'
  subRoutes:
    'VendorPackageSubroutes':
      package: 'Vendor.Package'
      variables:
        'defaultUriSuffix': '.html'

这里是文件Packages/Application/Vendor.Package/Configuration/Routes.yaml

-
  name:  'Backend'
  uriPattern: 'vendor.package/<BackendSubRoutes>'
  defaults:
    '@package':    'Vendor.Package'
    '@action':     'index'
    '@format':     'html'
  subRoutes:
    'BackendSubRoutes':
      package: 'Vendor.Package'
      suffix:  'Backend'

最后是文件Packages/Application/Vendor.Package/Configuration/Routes.Backend.yaml

-
  name: 'Backend Content Controller'
  uriPattern: 'backend/content(/{@action})'
  defaults:
    '@package':    'Vendor.Package'
    '@controller': 'Backend\Content'
  appendExceedingArguments: TRUE

如果现在调用 URL:http://domain.com/vendor.package/backend/content/index,则会引发“找不到页面”错误。我必须停用TYPO3.Flow.error.exceptionHandler.renderingGroups.notFoundExceptions 才能查看更多详情:

抱歉,找不到您请求的页面。技术细节:

无法通过 给定 URI 段“vendor.package”。 (参考代码: 2014121115590523bc78)

但我不知道/neos 的路径段是如何为尺寸定义的,它在那里工作......

我必须如何配置它?

【问题讨论】:

    标签: neoscms


    【解决方案1】:

    尝试将您的供应商路由定义放在 main Routs.yaml 中的 neos 之上。 检查您的 Data/Logs/System_Development.log 是否匹配。

    嗯,为你的 Vendor.Package 移除这部分:

      variables:
        'defaultUriSuffix': '.html'
    

    【讨论】:

      【解决方案2】:

      谢谢塔金。开发日志是一个很好的提示 :) 我想我已经明白了,我会分享这个。有几种配置可以设置:

      1) 通过 TS2 页面呈现的 LINK 标记 - 就像 Neos 一样 - 在需要登录的标题中。

      <f:security.ifAccess resource="Vendor_Package_BackendAccess">
          <link rel="vendor-package-backend-content" href="http://typo3-neos-1.1.x.dev/vendor.package/backend/content/load />
      </f:security.ifAccess>
      

      2) 控制器Packages/Application/Vendor.Package/Classes/Vendor/Package/Controller/Backend/ContentController.php

      3) 文件Configuration/Routes.yaml中的设置:

      -
        name: 'Vendor Package
        uriPattern: '<VendorPackageSubroutes>'
        subRoutes:
          'VendorPackageSubroutes':
            package: 'Vendor.Package'
            variables:
              'defaultUriSuffix': '.html'
      

      4) 文件Packages/Application/Vendor.Package/Configuration/Routes.yaml

      -
        name:  'Backend'
        uriPattern: 'vendor.package/<BackendSubRoutes>'
        defaults:
          '@package':    'Vendor.Package'
          '@action':     'index'
          '@format':     'html'
        subRoutes:
          'BackendSubRoutes':
            package: 'Vendor.Package'
            suffix:  'Backend'
      

      5) 文件Packages/Application/Vendor.Package/Configuration/Routes.Backend.yaml

      -
        name: 'Backend Content Controller'
        uriPattern: 'backend/content(/{@action})'
        defaults:
          '@package':    'Vendor.Package'
          '@controller': 'Backend\Content'
        appendExceedingArguments: TRUE
      

      6) 文件Packages/Application/Vendor.Package/Configuration/Policy.yaml

      resources:
        methods:
          Vendor_Package_BackendAccess: 'method(Vendor\Package\Controller\Backend\ContentController->.*Action())'
      
      acls:
        'TYPO3.Neos:Editor':
          methods:
            Vendor_Package_BackendAccess: GRANT
      

      7) 至少Packages/Application/Vendor.Package/Configuration/Settings.yaml

        Flow:
          security:
            authentication:
              providers:
                Typo3BackendProvider:
                  requestPatterns:
                    controllerObjectName: 'TYPO3\Neos\Controller\.*|TYPO3\Neos\Service\.*|TYPO3\Media\Controller\.*|Vendor\Package\Controller\Backend\.*'
      

      8) Packages/Application/Vendor.Package/Configuration/Settings.yaml 还有一件事,否则你会得到一个缺少维度映射的错误原因。

        TYPO3CR:
          contentDimensions:
            'language':
              presets:
                'vendor.packages':
                  label: ''
                  values: ['mul_ZZ']
                  uriSegment: 'vendor.packages'
      

      这将是答案的第一部分:)

      但还有一些问题:

      1) 这将至少是一个包。所以我很奇怪为什么我必须在Configuration/Routes.yaml 中设置东西,这不会是安装过程的一部分(?)。

      2) 在本例中,需要覆盖路径Flow.security.authentication.providers.Typo3BackendProvider.requestPatterns.controllerObjectName。我不认为这是有用的,必须有其他方法。

      【讨论】:

        猜你喜欢
        • 2015-02-09
        • 1970-01-01
        • 1970-01-01
        • 2021-03-26
        • 2015-04-10
        • 1970-01-01
        • 2022-01-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多