typo3 - 未声明的参数传递给 ViewHelper maxRange
问题描述
更新 TYPO3 后,我得到一个 TYPO3Fluid\Fluid\Core\ViewHelper\Exception “未声明的参数传递给 ViewHelper ... maxRange 有效参数是。”
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
class NumberOfStarsViewHelper extends AbstractViewHelper
{
/**
* divides the maxRange with two
* (A rating of 10 results in 5 Starts e.g.)
*
* @param integer $maxRange
* @return boolean
*/
public function render($maxRange)
{
return array_fill(0, ($maxRange / 2), 'iter');
//===
}
}
我能做些什么?谢谢
解决方案
您正在遵循旧的方法来创建 ViewHelper 使用renderStatic
而不是render
方法。在此处关注官方文档。
更多信息,@Michael 解释了差异。renderStatic
和之间render
!
所以,你需要做的是,
- 将旧方法迁移到新方法(我在上面说过)
- 您将需要注册参数(参见文档)
请参阅以下 ViewHelper 的 refectored 代码:
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
class NumberOfStarsViewHelper extends AbstractViewHelper
{
use CompileWithContentArgumentAndRenderStatic;
public function initializeArguments() {
$this->registerArgument('maxRange', 'string', 'divides the maxRange with two', false, null);
}
public static function renderStatic(
array $maxRange,
\Closure $renderChildrenClosure,
RenderingContextInterface $renderingContext
) {
$maxRange = $renderChildrenClosure();
// Debug to get argument
var_dump($maxRange);
// return array_fill(0, ($maxRange / 2), 'iter');
//===
}
}
有关更多信息,请查看此处的文档:https ://docs.typo3.org/m/typo3/book-extbasefluid/master/en-us/8-Fluid/8-developing-a-custom-viewhelper.html
推荐阅读
- google-chrome - 如何避免 nginx 中 http 304 上的响应正文?
- vue.js - 区分 Select2 for Vue 中的新标签
- google-app-engine - 服务正在使用其他服务的静态文件
- java - toast.maketext 不更新值
- asp.net - 在 ECS 中使用哪个 ASP.NET Windows 容器镜像?基本映像中的 Windows Docker 容器与 Amazon ECS 的兼容性问题
- functional-programming - 使用 for 将新元素添加到列表中
- environment-variables - Hyperledger Faric CA:ENV 覆盖证书签名请求 (CSR) 部分
- java - AnyLogic:如何找到集合的最大值
- python - 在一个 .exe 文件中编译成模块
- ef-core-2.1 - EF Core Fluent API(如何从主键中删除标识)