在以下代码中,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/

10-15 09:23