传递给 ViewHelper maxRange 的未声明参数
Undeclared arguments passed to 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');
//===
}
}
我能做什么?
谢谢
您正在按照旧的 fashin 方法使用 renderStatic
而不是 render
方法创建 ViewHelper。关注官方文档here.
有关更多信息,@Michael 已解释差异。在 renderStatic
和 render
之间!
所以,您需要做的是,
- 将旧方法迁移到新方法(我在上面说过)
- 您需要注册参数(参见文档)
查看下面重构的 ViewHelper 代码:
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
这里是解决方案:
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
class NumberOfStarsViewHelper extends AbstractViewHelper
{
public function initializeArguments() {
parent::initializeArguments();
$this->registerArgument('maxRange', 'string', 'divides the maxRange with two', false, null);
}
use CompileWithRenderStatic;
public static function renderStatic(
array $arguments,
\Closure $renderChildrenClosure,
RenderingContextInterface $renderingContext
) {
return array_fill(0, ($arguments["maxRange"] / 2), 'iter');
}
}
更新 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');
//===
}
}
我能做什么? 谢谢
您正在按照旧的 fashin 方法使用 renderStatic
而不是 render
方法创建 ViewHelper。关注官方文档here.
有关更多信息,@Michael 已解释差异。在 renderStatic
和 render
之间!
所以,您需要做的是,
- 将旧方法迁移到新方法(我在上面说过)
- 您需要注册参数(参见文档)
查看下面重构的 ViewHelper 代码:
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
这里是解决方案:
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
class NumberOfStarsViewHelper extends AbstractViewHelper
{
public function initializeArguments() {
parent::initializeArguments();
$this->registerArgument('maxRange', 'string', 'divides the maxRange with two', false, null);
}
use CompileWithRenderStatic;
public static function renderStatic(
array $arguments,
\Closure $renderChildrenClosure,
RenderingContextInterface $renderingContext
) {
return array_fill(0, ($arguments["maxRange"] / 2), 'iter');
}
}