【问题标题】:TYPO3 Get URL parameters in PHP controllerTYPO3 在 PHP 控制器中获取 URL 参数
【发布时间】:2013-06-04 07:17:18
【问题描述】:

如何在 TYPO3 的 PHP 代码中获取 url parameters?

我有这样的链接

<f:link.page pageUid="138" additionalParams="{myname: Lilly}">Click!</f:link.page>

该页面附加了一个控制器,现在如何将传递参数的值传递给我的控制器?

我将不得不根据传递的参数渲染Views。

编辑

我不确定如何解决这个问题。

我有一个控制器,它有 list 和 show 的动作。如果parameters 发送到show 操作是all,则应显示所有项目,同样view 会根据传递的参数进行更改。

我的问题是:

  1. 如何传递参数以及如何在 Controller 中捕获它们?
  2. 到动作控制器的链接显示得很长,看起来很丑。如何自定义链接?有没有像routes 这样的东西,我可以通过它实现这一目标?

【问题讨论】:

  • 为什么要在show action上显示所有项目?列表操作不应该这样做吗?另外,我理解你的意思吗,你的插件被插入到多个页面上(一个页面用于列表视图,另一页用于显示视图)?你使用两个插件还是一个?
  • 我只使用一个插件但不同的动作来呈现不同类型的视图。在我的应用程序中,列表操作显示有限制的项目,而我的显示显示所有项目没有任何限制和不同的设计

标签: typo3 url-parameters


【解决方案1】:

您只需要使用f:link.action 视图助手。如果您在列表操作中,您可以执行以下操作:

<f:link.action action="show" arguments="{myArgument: myArgument}">Link</f:link>

这应该将视图切换到显示操作的视图。

如果您需要捕获其他参数,您可以$this-&gt;request-&gt;getArguments() 获取所有参数,或$this-&gt;request-&gt;getArgument('myArgument') 获取控制器中的特定参数。请注意,这将只包含参数,通过f:link.action viewhelper 干净地发送,因为这些参数以您正在使用的当前扩展/插件为前缀。

如果您使用 RealURL,您可以提供一个配置来将您的 URL 重写为较短的。

编辑:

如果您的链接需要指向另一个页面,您只需添加以下内容:

<f:link.action action="show" arguments="{myArgument: myArgument}" pageUid="myId">Link</f:link>

【讨论】:

  • 是的。如果我想在same page 上显示list 和show 视图,您的解决方案将适用。但就我而言,list 视图显示在 uid 77 的一个页面上,show 显示在另一个 uid 87 的页面上。
  • 只需将“pageUid”添加到链接查看器,我已经在我的帖子中添加了一个示例。
  • 太棒了!你刚刚为我节省了很多时间。谢谢你:)
  • 这里有一个错字:结束标签应该是&lt;/f:link.action&gt;。
【解决方案2】:

要完全自动支持操作,您需要使用 f:link.action viewhelper,但正如您所发现的那样 - 它会创建太长的参数集(包括控制器等)

f:link.pageVH 提到了这种情况下的最佳选择,但是您需要付出更多努力才能找到合适的操作。

您有多种选择:

  • 如果您想/可以在单独的页面上显示这些视图,只需创建两个 FE 插件,第一个将使用 show 作为默认操作,第二个 - list 操作。然后您可以使用简化的参数。
  • 使用 TypoScript 将插件放置在页面上,在这种情况下,您可以使用 bootstrap 您的插件和不同的默认操作 - 取决于 TS 条件(如果参数 x 存在引导程序和显示,否则使用列表)
  • 对两个视图使用一个操作,并作为结果呈现一个独立的视图:

    public function show2Action() {
        $view = t3lib_div::makeInstance('Tx_Fluid_View_StandaloneView');
        if (t3lib_div::_GP('myname') == 'Lilly') {
            $view->setTemplatePathAndFilename(t3lib_extMgm::extPath('yourext') . '/Resources/Private/Templates/Some/Show.html');
            $view->assign('message', 'Hello ' . t3lib_div::_GP('myname'));
        } else {
            $view->setTemplatePathAndFilename(t3lib_extMgm::extPath('yourext') . '/Resources/Private/Templates/Some/List.html');
            $view->assign('message', 'Enter your name');
        }
        return $view->render();
    }
    

不要忘记验证您使用 _GP 获取的数据。

【讨论】:

  • 太棒了!这是一个很好的方法。但是,在控制器中,我们可以使用$this-&gt;request-&gt;getArgument('show');,而不是使用t3lib_div。但问题是如何检查参数show 是否已设置?
  • 不,你不能:参数取自完整的参数名称 tx_something[someelse]=foo - 不是你问的来自单个 GET 参数:?name=Lilly,同时使用 link.page 而不是link.action你需要使用_GP
【解决方案3】:

如果您需要更高级的视图助手,还有 VHS 扩展 http://fedext.net/viewhelpers/vhs.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多