在我的控制器中的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);
}
Run Code Online (Sandbox Code Playgroud)
我已经在函数中定义了参数,为什么注释会阻塞?我知道这是必要的,但我从来不理解这个概念.
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
}
Run Code Online (Sandbox Code Playgroud)
由于类型提示,此示例代码将失败.这是因为@var如果存在类型提示,则extbase会忽略注释.您需要删除type-hint并且必须为@varPropertyMapper 提供注释,以获得有关如何正确映射传入数据的正确信息.因此,要使上述示例正常工作,您必须以这种方式编写它:
/**
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\VENDOR\Extension\Domain\Model\SomeModel> $someModelStorage
*/
public function indexAction($someModelStorage){
// do something
}
Run Code Online (Sandbox Code Playgroud)
无论如何,doc-comments对于记录功能很有用,你应该编写它们,为其他开发人员甚至你未来的自己提供有关你的功能的其他信息;)