2017-10-19 50 views
0

在我陈述我的问题之前,请注意,这是我第一次使用Typo3和/或创建Extbase扩展。Typo3扩展:通过参数传递对象不起作用。我究竟做错了什么?

基本上我想为Typo3创建一个extbase扩展,但我似乎无法围绕通过参数传递对象(分配给特定模板的视图)目的是将对象附加到另一个对象(1:n关系)。

我的例子:

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

请看下面的代码示例:

<f:link.action action="new" controller="Host" arguments="{appliance:appliance}" >Add Host X</f:link.action> 

这是该“家电”的对象传送给“主机”的作用,“新”的“Show.html”模板具体的代码行使用参数控制器......“主机”控制器:

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); 
} 

在这一点上,我得到以下错误信息:

“参数1传递给 CJK \ Icingaconfgen \控制器\ HostController :: newAction()必须CJK \ Icingaconfgen \域\型号\电器,没有任何的 实例给出”

我到底做错了什么?

+0

你有两个单独的插件,一个用于'Appliance'和一个用于'Host',现在尝试在这两者之间传输数据? –

+0

在Show.html模板中生成的链接是什么样的? –

+0

newAction的docblock是什么?TYPO3需要定义每个方法参数来解析参数,函数参数列表中的类型声明是不够的。 – j4k3

回答

1

您需要一个描述这些参数的Docblock。 看起来像只是评论,实际上跟着PHPDoc standard。这些声明由TYPO3 ReflectionClass解释为映射您的领域模型并验证参数和对象属性。

确保您在添加或更新这些缓存时完全刷新缓存。

/* 
* @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); 
} 
+0

似乎在我身边存在一个错误的理解,这可能是一个愚蠢的问题:但是我在哪里放这些线? @ PARAM \ CJK \ Icingaconfgen \域\型号\电器家电$ @ PARAM \ CJK \ Icingaconfgen \域\型号\ $ host主机 @返回空隙 – Mondblut

+0

这些线去什么地方,我把他们。在函数本身之前。 – j4k3

+0

它仍然显示了同样的错误消息... – Mondblut

0

你需要容易通过例如链接之前调试它,以确保有一个在您流体模板给出的Appliance模型<f:debug>{appliance}</f:debug>

如果这样可以,您应该在newAction之上添加一些文档注释,因为Extbase是指这一点。

一个例子是:(就像我写这篇文章时,发布了一个很好的例子)。 :)

+0

Man ...而且我认为这些行只是评论......看来我有很多要学习Typo3。 – Mondblut

+0

它没有工作.... 可变转储: CJK \ Icingaconfgen \域\模型\ Applianceprototypepersistent实体(UID = 26,PID = 8) kundeuid> 'TEST1'(5个字符) ipv4extern >'123'(3个字符) ipv4intern =>'123'(3个字符) sshport =>'123'(3个字符) passwordnsclient =>'123'(3个字符) passwordappliance =>'123'( 3个字符) 主机=> TYPO3 \ CMS \ Extbase \持久性\ ObjectStorageprototypeobject(1项) UID => 26(整数) _localizedUid => 26(整数)改性 _languageUid => 0(整数)改性 _versi onedUid => 26(整数)修改为 pid => 8(整数) – Mondblut

+0

现在一切正常,感谢您的帮助。 – Mondblut

相关问题