在以下代码中,books
是包含某些属性的 book
对象列表。通过点击标题,它会转到一个 Action display
流体模板是
<f:for each="books" as="book">
<f:link.action action="display" arguments="{book: book}"> {book.title} </f:link.action>
</f:for>
在 Controller 中
public function displayAction(){
print_r($this->request->getArguments());
}
此处未设置 book 的值。 [书] => 空。我尝试打印它的类,它仍然给我空。
当我将参数作为
book.title instead of the entire object
发送时它工作正常我在这里缺少什么?这是将对象作为参数传递的正确方法吗?
编辑:
最初我尝试过这种方式。
public function displayAction(\TYPO3\MyExt\Domain\Model\Book $book) {}
但这给了我
Exception while property mapping at property path "":No converter found which can be used to convert from "string" to "TYPO3\MyExt\Domain\Model\Book"
Book 类是我手动创建的,没有在扩展构建器下注册。
最佳答案
您可以尝试使用该操作的参数:
public function myAction(Tx_MyExt_Domain_Model_Book $book) {
$this->view->assignMultiple(array(
'title' => $book->getTitle(),
'label' => $book->getLabel(),
'content' => $book->getContent()
));
}
编辑:我更新了这个例子。
更新:
它适用于 book.title 因为它只是一个字符串。当你想要一个完整的书对象时,它需要在一些存储中找到。一个数据库,例如……因此这意味着您需要一个模型和一个存储库。也是 tca 和表文件中的一个条目。使用扩展构建器更好地创建您的模型,一开始会更容易、更安全。
关于parameter-passing - TYPO3。在 FLUID View 助手中将对象作为参数传递,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17319086/