当前位置: 首页 > 知识库问答 >
问题:

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

廖诚
2023-03-14

我开发了一个定制的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中的说明,但与我在扩展中已经做的没有什么不同。

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

你能帮我什么忙吗?

非常感谢你!乔治

共有2个答案

邢昂然
2023-03-14

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

启动函数

    \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, delete, edit, monthview, test, ajax, deleteConfirm, showRss, getIcal, addForm, add, editForm, importeventtoforum',
            'Channel' => 'list, show',
            'Tag' => 'filter, show'
        ]
    );
        

};

$boot();

取消设置($boot);

该操作已在EventController中注册。php,如下所示:

/***action geticalaction**@参数\Luc\Lucevents2\域\模型\事件$事件*@返回空*/

 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);
        
    }           
}

非常感谢你!

韦熙云
2023-03-14

我今天碰到了这个问题。“基于php的视图”的文档似乎已经过时。下面是我的设置说明和TYPO3 10的解决方案

我的情况是,我有一个带有showAction()action方法的控制器。在打字脚本中,我通过type参数设置了一种新格式。差不多

rss = PAGE
rss {
   typeNum = 58978
   10 =< tt_content.list.20.skevents_eventfeeds
}

对于这种类型(参数类型=58978),我使用render()方法设置了一个名为View\EventFeeds\ShowRss的类。

TYPO3根据类型(rss)和操作名(show)自动解析这个类。这不再起作用了。

解决此问题的方法:为了让TYPO3使用render方法找到正确的类,将控制器的defaultViewObjectName变量设置为特定操作的正确类名就足够了。这可以通过以下新方法在控制器中完成

public function initializeShowAction() 
{
   $this->defaultViewObjectName = \Skar\Skevents\View\EventFeeds\ShowRss::class;
}

现在,在调用showAction方法之前,将defaultViewObjectName设置为生成输出的ShowRss类。

请注意,我的ShowRss类扩展了\TYPO3\CMS\Extbase\Mvc\View\AbstractView。根据https://docs.typo3.org/m/typo3/book-extbasefluid/master/en-us/8-Fluid/9-using-php-based-views.html这在TYPO3 11中被弃用,并且必须在TYPO3 12中改变

 类似资料:
  • 本文向大家介绍迁移PHP版本到PHP7,包括了迁移PHP版本到PHP7的使用技巧和注意事项,需要的朋友参考一下 今天看到微博上说phpng也就是php7合并到master上了,大家都知道我是比较喜欢探讨最新版本的东西,看看有什么特性,我就忍不住升级去了,以前我的PHP版本是5.5.19,然后我就开始了。 然后编译配置参数,我的博客服务器是腾讯云服务器,因为是博客配置比较低。如下: 下边是针对php

  • 可悲的是,这些来源中引用的大多数轴突迁移指南和文档已经过时或被删除。 外面还有移民指南吗?另外,哪种方法更好--一次迁移还是两步迁移?有Axon经验的人可以分享他们的来源或见解吗?

  • 迁移CVS版本库到Subversion 或许让CVS用户熟悉Subversion最好的办法就是让他们的项目继续在新系统下工作,这可以简单得通过平淡的把CVS版本库的导出数据导入到Subversion完成,或者是更加完全的方案,不仅仅包括最新数据快照,还包括所有的历史,从一个系统到另一个系统。这是一个非常困难的问题,包括推导保持原子性的修改集,转化两个系统完全不同的分支政策。但是我们还是有许多工具声

  • Mercurial(水银)是和Git同时代的、与之齐名的一款著名的分布式版本控制系统,也有相当多的使用者。就像水银又名汞,作为版本控制系统的Mercurial又称作Hg(水银元素符号)。Hg具有简单易用的优点,至少Hg提交的顺序递增的数字编号让Subversion用户感到更为亲切。Hg的开发语言除少部分因性能原因使用C语言外,大部分用Python语言开发完成,因而更易扩展,最终形成了Hg最具特色的

  • Subversion版本库到Git版本库的转换,最好的方法就是git-svn。而git-svn的使用方法在前面“Git和SVN协同模型”一章已经详细介绍过。本章的内容将不再对git-svn的用法做过多的重复,只在这里强调一下版本库迁移时的注意事项,相关git-svn内容还请参照前面的内容。 在迁移之前要确认一个问题,Subversion转换到Git库之后,Subversion还继续使用么?意思是说

  • CVS是最早广泛使用的版本控制系统,因为其服务器端存储结构的简单直白,至今仍受到不少粉丝的钟爱。但是毕竟是几十年前的产物,因为设计上的原因导致缺乏现代版本控制系统的一些必须功能,如:没有原子提交,分支管理不便(慢),分支合并困难因为合并过程缺乏跟踪,不支持文件名/目录名的修改等等。很多CVS的用户都已经转换到Subversion这一更好的集中式版本控制系统了。如果还在使用CVS,那么可以考虑直接迁