我构建了一个扩展,我想在将插件添加到页面时添加插件选项
Extension Name : hotels
在酒店模型中,
<?php
class Hotel{
... get set methods ...
}
?>
在 HotelController.php
<?php
namespace TYPO3\Hotels\Controller;
class HotelController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController{
public function listAction(){
// $this->view->assign('result', array('test' => 'hello, u r in list')); }
}
?>
在 ext_localconf.php 中
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
'TYPO3.' . $_EXTKEY,
'hotels',
array('Hotel' => 'list,single,display,update,save,preview,edit')
);
在 ext_tables.php 中
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
$_EXTKEY,
'hotels',
'list of Hotels'
);
$pluginSignature = str_replace('_','',$_EXTKEY) . '_hotels';
$TCA['tt_content']['types']['list']['subtypes_addlist'][$pluginSignature] ='pi_flexform';
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue($pluginSignature, 'FILE:EXT:' . $_EXTKEY . '/Configuration/FlexForms/flexform_myhotel.xml');
不知怎的,我觉得我错过了一些东西。这会产生错误:
我可以在添加扩展时在后端看到该选项,但是当我想显示(查看)我添加该扩展的页面时,会生成错误。
----> The default controller for extension "Hotels" and plugin "hotels" can not be determined. Please check for TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin() in your ext_localconf.php.
请指导我
最佳答案
在 TYPO3 6.x 中,建议您使用命名空间类并告诉 configurePlugin
方法您的供应商名称。
由于您没有包含任何 Controller 代码,我将尝试绘制它的草图:
- 首先,请确保您使用命名空间 Controller 类 - 请记住设置供应商名称。
- 确保您的操作以
*Action
命名。后缀
外部:myext/Classes/Controller/HotelController
namespace MyVendor\MyExt\Controller;
class HotelController {
/**
* @return void
*/
public function listAction(){
}
}
接下来,在configurePlugin中提及命名空间,如下所示:
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
'MyVendor.' . $_EXTKEY,
// UpperCamelCase please, refer to [1]
'Hotels',
array('Hotel' => 'list,single,display,update,save,preview,edit')
);
这允许类定位器正确解析类。
要验证它,请确保重新安装扩展程序。
PS:请在 6.x 中尽可能使用命名空间类。老Tx_*
类只是别名,会给您的解释器带来额外的负担。
1 - TYPO3 API Docs for ExtensionUtility::configurePlugin()
更新:
可能存在多种错误。
- 您连接了 FlexForm。您是否设置了
switchableControllerActions
适当吗? - 我不止一次看到的一件事:
f:link.action
(或分别为 f:uri.action)不喜欢没有适当的controller
属性 - 您显然错过了命名空间概念:) 将您的 ControllerClass 重命名为
HotelController
并且该文件必须位于Classes/Controller/HotelController.php
,然后对configurePlugin()
进行调整反射(reflect)我所描述的供应商名称
关于php - 无法确定扩展和插件的默认 Controller TYPO3 中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22146726/