Php 无法在TYPO3中确定扩展和插件的默认控制器错误

Php 无法在TYPO3中确定扩展和插件的默认控制器错误,php,typo3,Php,Typo3,我构建了一个扩展,我想在将插件添加到页面时添加插件选项 Extension Name : hotels 在酒店模型中 <?php class Hotel{ ... get set methods ... } ?> 在ext_tables.php中 \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin( $_EXTKEY, 'hotels',

我构建了一个扩展,我想在将插件添加到页面时添加插件选项

 Extension Name : hotels
在酒店模型中

 <?php
    class Hotel{
          ... get set methods ...
      }
  ?>
在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');
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
    $_EXTKEY,
    'hotels',
    'list of Hotels'
);

$extensionName  = \TYPO3\CMS\Core\Utility\GeneralUtility::underscoredToUpperCamelCase($_EXTKEY);
$pluginSignature = strtolower($extensionName). '_hotels';


if (TYPO3_MODE === 'BE') {

    /**
     * Registers a Backend Module
     */
    \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerModule(
        'TYPO3.' . $_EXTKEY,
        'web',   // Make module a submodule of 'web'
        'hotels',   // Submodule key
        '',                     // Position
        array(
            'Hotel' => 'list,single,display,update,save,preview,edit'
        ),
        array(
            'access' => 'user,group',
            'icon'   => 'EXT:' . $_EXTKEY . '/ext_icon.gif',
            'labels' => 'LLL:EXT:' . $_EXTKEY . '/Resources/Private/Language/locallang_hotels.xlf',
        )
    );

}

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile($_EXTKEY, 'Configuration/TypoScript', 'Hotels List');
不知怎么的,我想我错过了什么。这会产生一个错误:

在添加扩展时,我可以在后端看到该选项,但当我想显示(查看)添加该扩展的页面时,会生成一个错误

----> 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
方法您的供应商名称

由于您没有包含任何控制器代码,我将尝试勾画它:

  • 首先,请确保您使用了一个有名称空间的控制器类,并记住设置供应商名称
  • 确保使用
    *Action
    后缀命名您的操作
  • EXT: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')
    );
    
    这允许类定位器正确解析类

    要验证它,请确保重新安装扩展

    请尽可能在6.x中使用命名空间类。旧的
    Tx.*
    类只是别名,会增加解释器的负载

    更新:

    有许多可能的错误

  • 你给FlexForm连线了。您是否正确设置了
    switchableControllerActions
  • 我不止一次看到一件事:
    f:link.action
    (或者分别是f:uri.action)不喜欢没有适当的
    控制器
    属性
  • 您显然错过了名称空间的概念:)将ControllerClass重命名为
    HotelController
    ,文件必须位于
    Classes/Controller/HotelController.php
    ,然后对
    configurePlugin()
    进行调整,以反映我描述的供应商名称

  • 在TYPO3 6.x中,建议您使用命名空间类,并告诉
    configurePlugin
    方法您的供应商名称

    由于您没有包含任何控制器代码,我将尝试勾画它:

  • 首先,请确保您使用了一个有名称空间的控制器类,并记住设置供应商名称
  • 确保使用
    *Action
    后缀命名您的操作
  • EXT: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')
    );
    
    这允许类定位器正确解析类

    要验证它,请确保重新安装扩展

    请尽可能在6.x中使用命名空间类。旧的
    Tx.*
    类只是别名,会增加解释器的负载

    更新:

    有许多可能的错误

  • 你给FlexForm连线了。您是否正确设置了
    switchableControllerActions
  • 我不止一次看到一件事:
    f:link.action
    (或者分别是f:uri.action)不喜欢没有适当的
    控制器
    属性
  • 您显然错过了名称空间的概念:)将ControllerClass重命名为
    HotelController
    ,文件必须位于
    Classes/Controller/HotelController.php
    ,然后对
    configurePlugin()
    进行调整,以反映我描述的供应商名称
  • 试试看

    在ext_localconf.php中

     \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
        'TYPO3.' . $_EXTKEY,
        'hotels',
         array('Hotel' => 'list,single,display,update,save,preview,edit')
        );
    
    \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
        'TYPO3.' . $_EXTKEY,
        'hotels',
        array(
            'Hotel' => 'list,single,display,update,save,preview,edit'
        ),
        // non-cacheable actions
        array(
            'Hotel' => 'list',
        )
    );
    
    在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');
    
    \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
        $_EXTKEY,
        'hotels',
        'list of Hotels'
    );
    
    $extensionName  = \TYPO3\CMS\Core\Utility\GeneralUtility::underscoredToUpperCamelCase($_EXTKEY);
    $pluginSignature = strtolower($extensionName). '_hotels';
    
    
    if (TYPO3_MODE === 'BE') {
    
        /**
         * Registers a Backend Module
         */
        \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerModule(
            'TYPO3.' . $_EXTKEY,
            'web',   // Make module a submodule of 'web'
            'hotels',   // Submodule key
            '',                     // Position
            array(
                'Hotel' => 'list,single,display,update,save,preview,edit'
            ),
            array(
                'access' => 'user,group',
                'icon'   => 'EXT:' . $_EXTKEY . '/ext_icon.gif',
                'labels' => 'LLL:EXT:' . $_EXTKEY . '/Resources/Private/Language/locallang_hotels.xlf',
            )
        );
    
    }
    
    \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile($_EXTKEY, 'Configuration/TypoScript', 'Hotels List');
    
    @清除缓存并删除typo3temp数据

    试试

    在ext_localconf.php中

     \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
        'TYPO3.' . $_EXTKEY,
        'hotels',
         array('Hotel' => 'list,single,display,update,save,preview,edit')
        );
    
    \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
        'TYPO3.' . $_EXTKEY,
        'hotels',
        array(
            'Hotel' => 'list,single,display,update,save,preview,edit'
        ),
        // non-cacheable actions
        array(
            'Hotel' => 'list',
        )
    );
    
    在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');
    
    \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
        $_EXTKEY,
        'hotels',
        'list of Hotels'
    );
    
    $extensionName  = \TYPO3\CMS\Core\Utility\GeneralUtility::underscoredToUpperCamelCase($_EXTKEY);
    $pluginSignature = strtolower($extensionName). '_hotels';
    
    
    if (TYPO3_MODE === 'BE') {
    
        /**
         * Registers a Backend Module
         */
        \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerModule(
            'TYPO3.' . $_EXTKEY,
            'web',   // Make module a submodule of 'web'
            'hotels',   // Submodule key
            '',                     // Position
            array(
                'Hotel' => 'list,single,display,update,save,preview,edit'
            ),
            array(
                'access' => 'user,group',
                'icon'   => 'EXT:' . $_EXTKEY . '/ext_icon.gif',
                'labels' => 'LLL:EXT:' . $_EXTKEY . '/Resources/Private/Language/locallang_hotels.xlf',
            )
        );
    
    }
    
    \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile($_EXTKEY, 'Configuration/TypoScript', 'Hotels List');
    

    @清除缓存并删除typo3temp数据

    尝试重新安装扩展、添加插件并清除TYPO3缓存?嘿,克里斯托夫。。!!还没开始工作。。!!!试图重新安装扩展、添加插件并清除TYPO3缓存?嘿,Christoph。。!!还没开始工作。。!!!嘿,塞德里克,谢谢你的回答。。但尚未工作..显示相同的错误。。!!你能告诉我们你的名字空间和其他文件的内容吗?要点太棒了。你完全错过了名称空间,请按照我的指示去做。Tx_*类和名称空间冲突。我们还经历了完全删除插件并再次创建插件解决了这个问题。嘿,Cedric Thnks,谢谢你的回答。。但尚未工作..显示相同的错误。。!!你能告诉我们你的名字空间和其他文件的内容吗?要点太棒了。你完全错过了名称空间,请按照我的指示去做。Tx_*类和名称空间冲突。我们还经历了完全删除插件并再次创建插件可以解决此问题。TYPO3的哪个版本?并使用extension_builder?版本:TYPO3 6.1开发&此酒店扩展由我自己开发,不使用extension_builder。。我尝试使用extension_builder,但出现了相同的错误。TYPO3的哪个版本?并使用extension_builder?版本:TYPO3 6.1开发&此酒店扩展由我自己开发,不使用extension_builder。。我尝试使用extension_builder,但出现了相同的错误。。