TYPO3扩展:为什么我需要这个注释块中的符号?

时间:2018-01-11 08:20:43

标签: typo3

在我的控制器中的TYPO3扩展中:以下代码做什么或更确切地说"为什么我需要注释块中的符号?"。

 /**
  * action show
  *
  * @param \Cjk\Icingaconfgen\Domain\Model\Appliance $appliance
  * @return void
  */
public function showAction(\Cjk\Icingaconfgen\Domain\Model\Appliance $appliance)
    {
        $this->view->assign('appliance', $appliance);
    }

我已经在函数中定义了参数,为什么注释会阻塞?我知道这是必要的,但我从来不理解这个概念。

2 个答案:

答案 0 :(得分:5)

doc-block中的注释确定PropertyMapper如何将传入的POST或GET数据映射到适当的对象。正如Mathias Brodala在他的回答中所说,如果你有关于参数的类型提示,你本身并不需要它们,但是有一点例外。如果您的操作需要ObjectStorage,则可能需要提示该ObjectStorage内容的类型。否则,PropertyMapper无法正确转换传入数据。例如:

/**
 * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\VENDOR\Extension\Domain\Model\SomeModel> $someModelStorage
 */
public function indexAction(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $someModelStorage){
    // do something
}

由于类型提示,此示例代码将失败。这是因为如果存在类型提示,则extbase会忽略@var注释。 您需要删除类型提示,并且必须为PropertyMapper提供@var注释,以获得有关如何正确映射传入数据的正确信息。因此,要使上述示例正常工作,您必须以这种方式编写它:

/**
 * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\VENDOR\Extension\Domain\Model\SomeModel> $someModelStorage
 */
public function indexAction($someModelStorage){
    // do something
}

无论如何,doc-comments对于记录功能很有用,你应该编写它们,为其他开发人员甚至你未来的自己提供有关你的功能的其他信息;)

答案 1 :(得分:2)

对于控制器操作,docblock实际上不是必需的。 Extbase根据方法签名确定操作参数的类型。但是有一些功能,例如验证,必须在操作文件块中定义。

这就是说在整个代码库中为每个方法添加带有完整注释的docblock通常是一种很好的做法。