Pull to refresh

Заменяем устаревший метод \Joomla\CMS\Form::getInstance в Joomla.

Документация Joomla сообщает что метод getInstance устарел с версии 4.3 и будет удален в 6.0. И предлагает использовать FormFactory service из контейнера.

Factory::getContainer()->get(FormFactoryInterface::class)->createForm($name, $options);

Так как пример кода из документации слишком краткий и может вызвать вопросы у начинающего разработчика, я попробую его расширить.

Было так:

<?php
// подключаем папку
\Joomla\CMS\Form::addFormPath(JPATH_SITE . '/components/com_jshopping/addons/tags/forms');

$form = \Joomla\CMS\Form::getInstance(
    'configform',
    'configform',
    [
        'control' => 'params',
        'load_data' => true
    ],
    false
);

Или так, если если используются файлы форм с одинаковыми именами:

<?php
$form = \Joomla\CMS\Form::getInstance(
    'configform',
    JPATH_SITE . '/components/com_jshopping/addons/tags/forms/configform',
    [
        'control' => 'params',
        'load_data' => true
    ]
);

Пример исправленного кода с загрузкой xml-файла:

<?php
$form = Factory::getContainer()
    ->get(FormFactoryInterface::class)
    ->createForm(
        'com_jshopping.addons.tags.configform', // имя формы, которое позволит идентифицировать её в плагинах 
        [
            'control'   => 'params',
            'load_data' => true
        ]
    );

if (!$form->loadFile(JPATH_SITE . '/components/com_jshopping/addons/tags/forms/configform.xml'))
{
    throw new Exception('File loading error.');
}

Tags:
Total votes 1: ↑1 and ↓0+3
Comments0

Articles