1

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

我有这样的链接

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

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

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

编辑

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

我有一个控制器,它有动作listshow. 如果parameters发送到show操作是all,则应显示所有项目,并且view基于传递的参数进行类似的更改。

我的问题是:

  1. 如何传递参数以及如何在 Controller 中捕获它们?
  2. 到动作控制器的链接显示得很长,看起来很丑。如何自定义链接?有没有类似的东西routes我可以做到这一点?
4

3 回答 3

2

你只需要使用f:link.actionviewhelper。如果您在列表操作中,您可以执行以下操作:

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

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

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

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

编辑:

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

<f:link.action action="show" arguments="{myArgument: myArgument}" pageUid="myId">Link</f:link>
于 2013-06-04T09:45:24.847 回答
1

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

在这种情况下,最好的选择是提到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.

于 2013-06-04T08:54:41.317 回答
1

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

于 2013-06-04T16:00:00.213 回答