TYPO3 extbase,从 9 版本迁移到 10 版本时基于 php 的视图不起作用

问题描述

我开发了一个自定义的 TYPO3 extbase 扩展,它完美地适用于 TYPO3 的 8 和 9 版本。 最近我将我的安装升级到 TYPO3 10 版本,但我的 TYPO3 extbase 扩展的基于 PHP 的视图不再工作。 显示错误是: 抱歉,未找到请求的视图。 技术原因是:没有找到模板。无法解析类“Luc\Lucevents2\Controller\EventController”中的操作“getIcal”的视图

我已阅读页面中的说明 https://docs.typo3.org/m/typo3/book-extbasefluid/10.4/en-us/8-Fluid/9-using-php-based-views.html,但与我在扩展程序中所做的没有什么不同。

所以,我很困惑,因为没有解释为什么代码停止工作,上面的链接没有包含任何关于弃用代码或迁移后可能更改的说明!!

你能帮我吗?

非常感谢! 乔治

解决方法

静态模板已经包含在内,除了基于 php 的视图之外,扩展的所有其他操作都运行良好。 ext_localconf.php 如下所示:

$boot = function() {

    \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
        'Luc.Lucevents2','Luceventsdisplay',[
            'Event' => 'list,show,delete,edit,monthview,test,ajax,deleteConfirm,showRss,getIcal,addForm,add,editForm,importeventtoforum','Channel' => 'list,show','Tag' => 'filter,show'
        ],// non-cacheable actions
        [
            'Event' => 'list,show'
        ]
    );
        

};

$boot();

unset($boot);

action 注册在 EventController.php 中,如下所示:

/** *动作geticalaction * * @param \Luc\Lucevents2\Domain\Model\Event $event * @return 无效 */

 public function getIcalAction(\Luc\Lucevents2\Domain\Model\Event $event = NULL)
{
    $base_url = $this->request->getBaseUri();
    $channel=$this->settings['channel_for_simple_users'];
    

    if($this->request->hasArgument('duration'))
    {           
        if ($this->request->getArgument('duration')=='6month') {
            $duration=$this->request->getArgument('duration');              
        }
        else 
        {
            $duration='month';
        }           
        
        $events = $this->eventRepository->get_events_for_rss_and_ical($duration,$channel);
        $eventsarray= array();
        
        foreach ($events as $obj){                              
            $this->uriBuilder->setCreateAbsoluteUri(true);  
            $uri = $this->controllerContext->getUriBuilder()
            ->setUseCacheHash(false)
            ->uriFor('show',array("event" => $obj->getUid()));
            
            $eventsarray[] = array($obj->getTitle(),$obj->getDescription(),$obj->getStartdatetime(),$obj->getEnddatetime(),$obj->getBuildingid(),$obj->getRoomid(),$obj->getPlace(),$obj->getCrdate(),$uri,$obj->getUid());
        }       
                        
        $this->view->assign('events',$eventsarray);
        $this->view->assign('baseurl',$base_url);
                
    }
    else
    {       
        $this->uriBuilder->setCreateAbsoluteUri(true);
        $uri = $this->controllerContext->getUriBuilder()
        ->setUseCacheHash(false)
        ->uriFor('show',array("event" => $event->getUid()));
        
        $this->view->assign('event',$event);
        $this->view->assign('baseurl',$base_url);
        $this->view->assign('uri',$uri);
        
    }           
}

非常感谢!