(第2部分)这个流体误差是什么意思? 100次迭代后找不到唯一的路径段

时间:2015-05-05 19:21:47

标签: fluid typo3-flow

这是之前被问及已回答的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|)

2 个答案:

答案 0 :(得分:0)

错误与类的类型无关。 TYPO3 Flow为每个类创建代理类。这意味着它会为每个类生成新代码和新类。

错误是关于模板检测算法的循环。你以某种方式设法让Flow进入无限循环。

答案 1 :(得分:0)

正如Philipp已经说过的那样,这两个问题可能没有关系(在这种情况下它是Doctrine虽然它创建了代理,而不是Flow。)

如果您搜索例外代码 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