【问题标题】:TYPO3 extbase: Simple readable GET parametersTYPO3 extbase:简单易读的 GET 参数
【发布时间】:2021-11-10 17:58:24
【问题描述】:

自定义 extbase 控制器中的 GET 和 POST 参数需要以插件签名为前缀,以便自动注入:

<?php
namespace Vendor\Example\Controller;

class SearchController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController
{
    public function resultsAction($q = null)
    {
        //...
    }
}

搜索词$q只有在传递为?tx_example_search[q]=foo时才会自动填充。

有没有办法声明可读版本?q=foo也可以,并且应该由extbase注入?

(我知道当同一页面上的多个插件使用该参数时,这会中断,但在这里没问题。)

(在调用ActionController::processRequest()时,参数映射似乎已经完成,所以必须提前完成。)

【问题讨论】:

    标签: typo3 extbase


    【解决方案1】:

    您可以使用方法\TYPO3\CMS\Core\Utility\GeneralUtility::_GP($var) 来从全局变量GET/POST 中检索参数。

    或者也可以\TYPO3\CMS\Core\Utility\GeneralUtility::_GET($var)\TYPO3\CMS\Core\Utility\GeneralUtility::_POST($var)

    注意安全,这些参数没有经过消毒!

    如果你真的想将参数添加到动作中,你必须创建一个 initializeAction() 并设置参数,我猜是这样的:

    public function initializeResultsAction() {
       $myVar = \TYPO3\CMS\Core\Utility\GeneralUtility::_GP('q');
       $this->request->setArgument('q', $myVar);
    }
    

    【讨论】:

    • 这是我必须在我的操作中手动执行的操作。 Extbase 不会自动将它们注入到方法参数中。此外,extbase 也不清理参数。你总是必须引用/转义它们。
    • 当然你必须手动完成,但你必须这样做,因为你想做一些不是 extbase 标准的事情。
    • 为了清理,我想说使用类型提示以确保参数是字符串、数组、int 或 bool。
    【解决方案2】:

    您可以在路由配置中使用 Extbase 插件增强器。 见这里:TYPO3 Advanced routing configuration Docs

    TYPO3 然后会将 EXTbase URL 转换为可读版本。

    示例:

    没有 routeEnhancer:yourdomain.com/?tx_example_search[q]=foo

    使用 routeEnhancer:yourdomain.com/foo

    提示:您必须定义所有 GET 参数,否则 TYPO3 将显示 cHash 参数。

    【讨论】:

      猜你喜欢
      • 2017-06-02
      • 2012-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-06
      • 2013-08-26
      相关资源
      最近更新 更多