NullPointerException
s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException
. Они наиболее распространены, но другие способы перечислены на странице NullPointerException
javadoc.
Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException
, be:
public class Example {
public static void main(String[] args) {
Object obj = null;
obj.hashCode();
}
}
В первой строке внутри main
я явно устанавливаю ссылку Object
obj
равной null
. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException
, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.
(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)
В TYPO3 6.x вам рекомендуется использовать классы с именами и указать configurePlugin
метод вашего имени поставщика.
Поскольку вы не указали какой-либо из вашего кода контроллера, я попытаюсь набросать it:
*Action
suffix 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')
);
Это позволяет локатору классов правильно разрешать классы.
Чтобы убедиться в этом, убедитесь, что вы повторно установили расширение.
PS: Пожалуйста, используйте классы с именами, когда это возможно, в 6.x. Старые классы Tx_*
- это только псевдонимы и добавили дополнительную нагрузку на ваш интерпретатор.
1 - Документы API TYPO3 для ExtensionUtility :: configurePlugin ()
Обновление:
Существует множество возможных ошибок.
switchableControllerActions
соответствующим образом? f:link.action
(или f: uri.action соответственно) не любит быть без соответствующего атрибута controller
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'
),
// non-cacheable actions
array(
'Hotel' => 'list',
)
);
в ext_tables.php
\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
make sure you re-install your extension
сделал это для меня ... – max.haredoom 4 April 2014 в 22:03