问题描述
我开发了一个自定义的 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);
}
}
非常感谢!