如何使用 FluidTypo3 将参数传递给控制器​​操作?

Posted

技术标签:

【中文标题】如何使用 FluidTypo3 将参数传递给控制器​​操作?【英文标题】:How to pass argument to controller action with FluidTypo3? 【发布时间】:2016-07-30 00:51:53 【问题描述】:

如何将参数传递给启用磁通的控制器,以便控制器动作识别它?

我使用 builder 创建了一个扩展,并将以下方法添加到 ContentController。

/**
 * @param string $var
 */
public function exampleAction($var = null) 
    var_dump($var);
    die;

但无论我如何将参数添加到 URL,结果都只能得到“null”。

扩展目录是“test”,$_EXTKEY 也是。构建器将“Mac.Test”放入ext_tables.php 以调用registerProviderExtensionKey()。所以在 URL 中我尝试了这些参数:

http://host/index.php?id=1&tx_test_content[var]=abc
http://host/index.php?id=1&tx_test[var]=abc
http://host/index.php?id=1&tx_mactest_content[var]=abc
http://host/index.php?id=1&tx_mactest[var]=abc
http://host/index.php?id=1&var=abc

还有一些其他的。但无济于事。

我尝试使用 f:link.action ViewHelper,结果是http://localhost/test2/index.php?id=1&no_cache=1&tx_test_content[member]=foo&tx_test_content[action]=example&tx_test_content[controller]=Content

另外 $this->request->getArguments() 只返回一个空数组,所以肯定有严重错误。

使用过的版本: PHP 5.6.11 TYPO3 6.2.21 vhs 2.4.0 助焊剂 7.2.3 流体页面 3.3.1 流体内容 4.3.3 流体内容核心 1.3.0 生成器 1.0.0 没有安装其他任何东西(新系统仅用于测试此行为)。

【问题讨论】:

这是一个可缓存的控制器动作吗?如果是,那么它可能不关心基于先前执行的任何参数。 您能否在ext_localconf.php\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin() 中将电话发送给\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin()ext_tables.php 中?插件名称对参数名称很重要。 不,很遗憾我不能,因为我使用的是 FluidTYPO3(也称为通量)。因此在 ext_tables.php / ext_localconf.php 中没有插件配置。还是在这种情况下我应该拥有它?我没有在网上看到任何关于它的提及。 @Jost:我试了一下并添加了扩展名为“Test”、“MacTest”甚至“Mac.Test”的插件配置。完全没有区别。是的,我清除了缓存;) 不是答案,只是提示:使用TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($var); 进行调试。给你一些漂亮的风格输出 【参考方案1】:

使用流体链接,你可以通过para like

<f:link.action action="example" controller="controllerName"  arguments="var:'abc'">Go</f:link.action>

它会创建如下链接:

http://host/index.php?id=1&tx_[extension_key]_[fe_plugin_key][var]=abc

现在,如何从 extBase 中的 url 获取 para

$arguments = $this->request->getArguments(); // OR
$var = $this->request->getArgument('var');

有用的链接:

Fluid extBase Accessing GET/POST vars

【讨论】:

感谢您的尝试,但不幸的是它并没有改变任何东西。事实上,我一开始尝试通过f:link.action ViewHelper 生成链接,因为这根本没有影响,所以我尝试使用其他 URL 参数。不过,我应该注意到这一点。 $this-&gt;request-&gt;getArguments() 返回一个空数组。即使它返回了值,我也会失去很多魔法(比如将参数解析为完全加载的模型)。所以不幸的是你的提示没有帮助:(

以上是关于如何使用 FluidTypo3 将参数传递给控制器​​操作?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过控制器将参数传递给策略中使用的授权处理程序

如何将参数传递给 Laravel 5 中的隐式控制器?

AngularJS:如何将参数/函数传递给指令?

控制台应用程序参数,如何将参数传递给 Main 方法

如何将参数传递给 Laravel 包中的控制器操作?

如何将两种形式作为参数传递给 laravel 控制器?