【问题标题】:typo3 custom widget viewhelper错字3自定义小部件viewhelper
【发布时间】:2018-06-07 12:13:31
【问题描述】:

我为扩展创建了一个自定义小部件viewhelper,该扩展在空的typo3 8.7 安装中运行良好。但是当我用相同的代码在需要的项目上使用它时会导致错误:

#1289422564: initiateSubRequest() can not be called if there is no valid controller extending TYPO3\CMS\Fluid\Core\Widget\AbstractWidgetController Got "NULL" in class ...

以前是否有人遇到过这样的错误,或者有人知道导致这种错误的原因吗?

<!-- This is the View List.html-->


{namespace Exhibitors = MyVendorName\MyExhibitors\ViewHelpers}

<ul class="second_lvl">
    <Exhibitors:widget.AtoZNav objects="{feUserData}" as="filteredExhibitors" property="company">
        <Exhibitors:widget.sort objects="{filteredExhibitors}" as="sortedExhibitors" property="company">
            <f:for each="{filteredExhibitors}" as="feUser">
                <li class="navLink">
                    {feUser.company}<br />
                    {feUser.company}
                    {feUser.www}<br />
                </li>
            </f:for>
        </Exhibitors:widget.sort>
    </Exhibitors:widget.AtoZNav>
</ul>
<f:link.action action="show">show detail page</f:link.action>

<?php
/**
 * This is the SortViewHelper
 */

namespace MyVendorName\MyExhibitors\ViewHelpers\Widget;


class SortViewHelper extends \TYPO3\CMS\Fluid\Core\Widget\AbstractWidgetViewHelper
{
    /**
     * @param \TYPO3\CMS\Extbase\Persistence\QueryResultInterface $objects
     * @param string $as
     * @param string $property
     * @return string
     */
    public function render(\TYPO3\CMS\Extbase\Persistence\QueryResultInterface $objects, $as, $property)
    {
       return $this->initiateSubRequest();
    }
}

<?php
/**
 * This is the Sort Controller
 */

namespace MyVendorName\MyExhibitors\ViewHelpers\Widget\Controller;


class SortController extends \TYPO3\CMS\Fluid\Core\Widget\AbstractWidgetController
{
    /**
     * @var \TYPO3\CMS\Extbase\Persistence\QueryResultInterface
     */
    protected $objects;

    public function initializeAction()
    {
        $this->objects = $this->widgetConfiguration['objects'];
    }

    /**
     * @param mixed string $order
     */
    public function indexAction($order = \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_DESCENDING)
    {
        $order = ($order == \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING) ? \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_DESCENDING : \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING;
        $query = $this->objects->getQuery();
        $query->setOrderings(array($this->widgetConfiguration['property'] => $order));
        $modifiedObjects = $query->execute();
        $this->view->assign('contentArguments', array($this->widgetConfiguration['as'] => $modifiedObjects));
        $this->view->assign('order', $order);
    }
}

<?php
/**
 * This is AtoZNav ViewHelper
 */

namespace MyVendorName\MyExhibitors\ViewHelpers\Widget;

class AtoZNavViewHelper extends \TYPO3\CMS\Fluid\Core\Widget\AbstractWidgetViewHelper
{
    /**
     * @param \TYPO3\CMS\Extbase\Persistence\QueryResultInterface $objects
     * @param string $as
     * @param string $property
     * @return string
     */
    public function render(\TYPO3\CMS\Extbase\Persistence\QueryResultInterface $objects, $as, $property)
    {
       return $this->initiateSubRequest();
    }
}

<?php
/**
 * This is the Controller
 */

namespace MyVendorName\MyExhibitors\ViewHelpers\Widget\Controller;


class AtoZNavController extends \TYPO3\CMS\Fluid\Core\Widget\AbstractWidgetController
{
    /**
     * @var \TYPO3\CMS\Extbase\Persistence\QueryResultInterface
     */
    protected $objects;

    public function initializeAction()
    {
        $this->objects = $this->widgetConfiguration['objects'];
    }

    /**
     * @param string $char
     * @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException
     */
    public function indexAction($char = '%')
    {
        $query = $this->objects->getQuery();
        $query->matching($query->like($this->widgetConfiguration['property'], $char . '%'));
        $modifiedObjects = $query->execute();
        $this->view->assign('contentArguments', array($this->widgetConfiguration['as'] => $modifiedObjects));
        $this->view->assign('letters', range('A', 'Z'));
        $this->view->assign('char', $char);
    }
}

【问题讨论】:

  • 相同的 TYPO3 版本?在安装工具中清除缓存?清除了typo3temp中的自动加载目录?
  • 是的,它是同一个版本 8.7.x,所有缓存都被清除了
  • 请分享您的 ViewHelper 的代码
  • @HeinzSchilling 我添加了上面的代码
  • 我在未正确安装扩展程序时遇到了类似的错误。尝试卸载扩展并重新安装。

标签: typo3 viewhelper


【解决方案1】:

我遇到了同样的错误。您需要注入控制器,就像在流体分页小部件中完成的那样。书中没有这部分。

<?php
/**
 * This is the SortViewHelper
 */

namespace MyVendorName\MyExhibitors\ViewHelpers\Widget;


class SortViewHelper extends \TYPO3\CMS\Fluid\Core\Widget\AbstractWidgetViewHelper
{

    protected $controller;

    /**
     * @param Controller/SortController $controller
     */
    public function injectSortController(Controller\SortController $controller)
    {
        $this->controller = $controller;
    }

    /**
     * @param \TYPO3\CMS\Extbase\Persistence\QueryResultInterface $objects
     * @param string $as
     * @param string $property
     * @return string
     */
    public function render(\TYPO3\CMS\Extbase\Persistence\QueryResultInterface $objects, $as, $property)
    {
       return $this->initiateSubRequest();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    相关资源
    最近更新 更多