TYPO3 extbase,从 9 迁移到 10 版本时,基于 php 的视图不起作用
TYPO3 extbase, the php based views do not work when migrating from 9 to 10 version
我开发了一个自定义的 TYPO3 extbase 扩展,它在 TYPO3 的 8 和 9 版本上完美运行。
最近我将我的安装升级到 TYPO3 10 版本,但是我的 TYPO3 extbase 扩展的基于 php 的视图不再工作。
显示的错误是:
抱歉,找不到请求的视图。
技术原因是:没有找到模板。无法解析 class“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,但与我在扩展程序中所做的没有什么不同。
所以,我很困惑,因为没有解释为什么代码停止工作,上面的link不包括任何关于弃用代码或迁移后可能发生的变化的说明!!
你能帮我什么忙吗?
非常感谢!
乔治
静态模板已经包含在内,除了基于 php 的视图外,扩展的所有其他操作都运行良好。 ext_localconf.php 如下所示:
$boot=函数(){
\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 中注册,如下所示:
/**
* 动作geticalaction
*
* @param \Luc\Lucevents2\Domain\Model\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);
}
}
非常感谢!
我今天遇到了这个问题。 “php 基于视图”的文档似乎是 outdated.Below 是对我的设置的描述和 TYPO3 10
的解决方案
我有:
我的情况是我有一个带有 showAction() 操作方法的控制器。
在打字稿中,我通过类型参数设置了一种新格式。像
rss = PAGE
rss {
typeNum = 58978
10 =< tt_content.list.20.skevents_eventfeeds
}
对于这种类型(参数类型=58978),我设置了一个名为 View\EventFeeds\ShowRss 的 class 和一个 render() 方法。
TYPO3 根据类型 (rss) 和动作名称 (show) 自动解析此 class。这不再有效。
解决此问题的方法:
为了让 TYPO3 使用 render 方法找到正确的 class,将控制器的 defaultViewObjectName 变量设置为特定操作的正确 class 名称就足够了。这可以在控制器中使用以下新方法完成
public function initializeShowAction()
{
$this->defaultViewObjectName = \Skar\Skevents\View\EventFeeds\ShowRss::class;
}
现在,在调用 showAction 方法之前,将 defaultViewObjectName 设置为我的 ShowRss class,它会生成输出。
请注意我的 ShowRss class 扩展了 \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
进行更改
我开发了一个自定义的 TYPO3 extbase 扩展,它在 TYPO3 的 8 和 9 版本上完美运行。 最近我将我的安装升级到 TYPO3 10 版本,但是我的 TYPO3 extbase 扩展的基于 php 的视图不再工作。 显示的错误是: 抱歉,找不到请求的视图。 技术原因是:没有找到模板。无法解析 class“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,但与我在扩展程序中所做的没有什么不同。
所以,我很困惑,因为没有解释为什么代码停止工作,上面的link不包括任何关于弃用代码或迁移后可能发生的变化的说明!!
你能帮我什么忙吗?
非常感谢! 乔治
静态模板已经包含在内,除了基于 php 的视图外,扩展的所有其他操作都运行良好。 ext_localconf.php 如下所示:
$boot=函数(){
\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 中注册,如下所示:
/** * 动作geticalaction * * @param \Luc\Lucevents2\Domain\Model\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);
}
}
非常感谢!
我今天遇到了这个问题。 “php 基于视图”的文档似乎是 outdated.Below 是对我的设置的描述和 TYPO3 10
的解决方案我有: 我的情况是我有一个带有 showAction() 操作方法的控制器。 在打字稿中,我通过类型参数设置了一种新格式。像
rss = PAGE
rss {
typeNum = 58978
10 =< tt_content.list.20.skevents_eventfeeds
}
对于这种类型(参数类型=58978),我设置了一个名为 View\EventFeeds\ShowRss 的 class 和一个 render() 方法。
TYPO3 根据类型 (rss) 和动作名称 (show) 自动解析此 class。这不再有效。
解决此问题的方法: 为了让 TYPO3 使用 render 方法找到正确的 class,将控制器的 defaultViewObjectName 变量设置为特定操作的正确 class 名称就足够了。这可以在控制器中使用以下新方法完成
public function initializeShowAction()
{
$this->defaultViewObjectName = \Skar\Skevents\View\EventFeeds\ShowRss::class;
}
现在,在调用 showAction 方法之前,将 defaultViewObjectName 设置为我的 ShowRss class,它会生成输出。
请注意我的 ShowRss class 扩展了 \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