这是之前被问及已回答的question的延续,它再次出现并需要一个不同的解决方案(不同的问题,但错误信息相同)。
再次指向shippingAddress操作的链接不会呈现:
<f:link.action action="shippingAddress" controller="Order" arguments="{address: shippingAddress, changeAddress: 1}"><f:translate id="seethroughweb.shop.change-address">Change</f:translate></f:link.action>
当调试并期望发现地址变量为NULL但我发现它不是,但是它被var_dump报告为错误的类型 - 它被证明是:TYPO3\Flow\Persistence\Doctrine\Proxies\__CG__\SeeThroughWeb\Shop\Domain\Model\Address persistable proxy
但应该是:
SeeThroughWeb\Shop\Domain\Model\Address prototype persistable proxy
现在的问题是 - 为什么报告了错误的类型?为什么变量是错误的类型?查看代码,所有内容似乎都引用@param \SeeThroughWeb\Shop\Domain\Model\Address $address
异常日志中产生的异常与以前一样:
Uncaught exception #1316441798: No unique path segment could be found after 100 iterations.
80 TYPO3\Fluid\ViewHelpers\Link\ActionViewHelper_Original::render("shippingAddress", array|2|, "Order", NULL, NULL, "", "", array|0|, FALSE, array|0|, FALSE)
79 call_user_func_array(array|2|, array|11|)
答案 0 :(得分:0)
错误与类的类型无关。 TYPO3 Flow
为每个类创建代理类。这意味着它会为每个类生成新代码和新类。
错误是关于模板检测算法的循环。你以某种方式设法让Flow进入无限循环。
答案 1 :(得分:0)
如果您搜索例外代码 1316441798 ,则可以看到IdentityRoutePart
中引发了此异常。
可能你有类似以下的路线:
-
uriPattern: 'some/path/{address}'
defaults:
'@package': 'SeeThroughWeb.Shop'
'@controller': 'Order'
'@action': 'shippingAddress'
routeParts:
'address':
objectType: 'SeeThroughWeb\Shop\Domain\Model\Address'
使用objectType
选项,您可以告诉Flow使用数据库表将“{address}”映射到SeeThroughWeb\Shop\Domain\Model\Address
的实例。这样做是为了即使实体发生变化也能使URL保持有效。
如果两个实体解析为相同的URL段,Flow将附加一个计数器(例如“address-1”,“address-2”,......)。如果在100次迭代后无法解析唯一的段,则抛出异常。
有关“对象路径部件”的更多详细信息,请参阅Flow documentation。