Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Typo3扩展:通过参数传输对象不起作用。我做错了什么?_Php_Arguments_Typo3_Extbase - Fatal编程技术网

Php Typo3扩展:通过参数传输对象不起作用。我做错了什么?

Php Typo3扩展:通过参数传输对象不起作用。我做错了什么?,php,arguments,typo3,extbase,Php,Arguments,Typo3,Extbase,在我陈述我的问题之前,请注意这是我第一次使用Typo3和/或创建Extbase扩展 因此,基本上我想为Typo3创建一个extbase扩展,但我似乎无法理解通过参数将指定给特定模板视图的对象转移到动作的概念,目的是将该对象附加到另一个具有1:n关系的对象 我的例子是: 我为模板Show.html的视图分配了一个类型为Appliance的对象。我可以在模板中列出它的所有属性,因此它肯定存在于视图中。 现在,我想使用表单创建一个Host类型的对象,然后将其附加到这个特定的设备对象。 问题是:我无法将

在我陈述我的问题之前,请注意这是我第一次使用Typo3和/或创建Extbase扩展

因此,基本上我想为Typo3创建一个extbase扩展,但我似乎无法理解通过参数将指定给特定模板视图的对象转移到动作的概念,目的是将该对象附加到另一个具有1:n关系的对象

我的例子是:

我为模板Show.html的视图分配了一个类型为Appliance的对象。我可以在模板中列出它的所有属性,因此它肯定存在于视图中。 现在,我想使用表单创建一个Host类型的对象,然后将其附加到这个特定的设备对象。 问题是:我无法将类型设备的对象传输到类型主机的控制器的特定操作,该控制器本身应该将其分配给另一个模板的视图

请看以下代码示例:

<f:link.action action="new" controller="Host" arguments="{appliance:appliance}" >Add Host X</f:link.action>
此时,我收到以下错误消息:

参数1传递给 Cjk\Icingaconfgen\Controller\HostController::newAction必须是 Cjk\Icingaconfgen\Domain\Model\Appliance的实例,未给出任何实例


我做错了什么?

您需要一个描述这些参数的Docblock。 看起来像是评论的东西,实际上遵循的是。这些声明由TYPO3 ReflectionClass解释,以映射域模型并验证参数和对象属性

确保在添加或更新其中一个缓存时完全刷新缓存


您需要确保流体模板中有一个给定的设备模型,通过在链接(例如{Appliance})之前调试它可以很容易地完成

如果可以的话,您应该在newAction上面添加一些文档注释,因为Extbase引用了这些注释


举个例子:就在我写这篇文章的时候,一个很好的例子被贴了出来

您是否有两个独立的插件,一个用于设备,一个用于主机,现在尝试在这两个插件之间传输数据?Show.html模板中生成的链接是什么样子的?newAction的docblock是什么?TYPO3需要每个方法参数的定义来解析参数,函数参数列表中的类型声明是不够的。我在哪里可以找到docblock?再说一次:我对这个完全陌生,只是浏览了一些在线教程和一本书。在我第一天工作的时候,面对一些全新的事情真是糟糕透了。^^我似乎有一个误解,这可能是一个愚蠢的问题:但我该把这些话放在哪里呢?@param\Cjk\Icingaconfgen\Domain\Model\Appliance$Appliance@param\Cjk\Icingaconfgen\Domain\Model\Host$Host@return void这些行正好位于我放置它们的位置。就在函数本身之前。激活和停用扩展似乎有一个效果。。。现在它显示了另一个错误消息:调用未定义的方法FluidCache\u Icingaconfgen\u Host\u action\u new\u 8ac559363f91c5e20ebfcb2b828e8c7e5fbc449d::section\u b28b7af69320201d1cf206ebf28373980add1451OK,我只需要重写一些其他行,现在一切正常。非常感谢您的docblock提示。。。我想如果没有你的帮助,我将不得不放弃。真的谢谢你。很抱歉耽搁了。而且:是的,缓存失效是TYPO3中许多严重破坏的事情之一。通过删除typo3temp文件夹刷新整个缓存修复了这些错误,不幸的是,在这些情况下,这通常是必需的措施。。。我还以为这些只是评论。。。看来我有很多东西要学,当它涉及到打字3。它没有工作。。。。变量dump:Cjk\Icingaconfgen\Domain\Model\Applianceprototypepersistent entity uid=26,pid=8 kundeuid=>'test1'5个字符ipv4extern=>'123'3个字符ipv4intern=>'123'3个字符sshport=>'123'3个字符密码客户端=>'123'3个字符密码设备=>'123'3个字符主机=>TYPO3\CMS\Extbase\Persistence\ObjectStorageprototypeobject 1项目uid=>26整数\u localizedUid=>26整数修改_languageUid=>0 integermodified\u versionedUid=>26 integermodified pid=>8 Integer您在消息“它不起作用”和“现在一切都起作用”之间更改了什么我刚刚停用并激活了分机。我还必须在控制器中更改一些其他操作,但这不是问题。我的主要错误理解是doc block,所以我昨天肯定学到了一些东西。当使用typo3和扩展时,当您更改操作定义和其他内容时,您应该始终清除安装工具中的缓存
public function newAction(\Cjk\Icingaconfgen\Domain\Model\Appliance $appliance, \Cjk\Icingaconfgen\Domain\Model\Host $host = NULL)
{
$this->view->assign('appliance', $appliance);
$this->view->assign('host', $host);
}
/* 
 * @param \Cjk\Icingaconfgen\Domain\Model\Appliance $appliance
 * @param \Cjk\Icingaconfgen\Domain\Model\Host $host
 * @return void
 *
 */
public function newAction(\Cjk\Icingaconfgen\Domain\Model\Appliance $appliance, \Cjk\Icingaconfgen\Domain\Model\Host $host = NULL)
{
    $this->view->assign('appliance', $appliance);
    $this->view->assign('host', $host);
}