Как расширить Action

fara

Проверенные
Сообщения
53
Реакции
87
Баллы
8,120
Добрый день!
Нужна ваща помощь,столкнулся с трудностью при продление actin -действия.
Например имеется некий класс , как продлить акшен едит в дочернем классе.
Код:
Xenforo_ControllerPublic_Member
{
public function editAction()
{
//this is code
}
}
 
Ща, распишу.

Порядок, в общем, такой:
в админке, на вкладке Development, в разделе Code Event Listeners, создаете новый листенер на событие load_class_*, где * это тип расширяемого вами класса, или же можно выбрать просто load_class. В event hint вводите название расширяемого класса, если нужно работать только с ним, или оставляете пустое, тогда можно будет выбирать в коде, какой класс расширить.
В execute callback вписываете название класса и имя метода (метод должен быть статическим), который будет действовать как каллбек загрузки классов, с параметрами $class и &$extend - в первом будет имя загружаемого класса (из поля event hint, или любое имя класса, который загружается в данный момент, если хинт оставили пустой). $extend - массив по ссылке, в который нужно будет добавить имя класса, которым будете расширять.

Сам класс с каллбеком выглядит примерно так:
PHP:
class MyAddon_Listener
{
    public static function load_class($class, array &$extend)
    {
        // это тот класс, который нужен?
        if ($class == 'XenForo_ControllerPublic_Member')
        {
            // добавляем в массив имя класса, который расширит его
            $extend[] = 'MyAddon_ControllerPublic_Member';
         }
    }
}

Потом создаете сам класс, который будет расширять. С вот такой сигнатурой:
PHP:
class MyAddon_ControllerPublic_Member extends XFCP_MyAddon_ControllerPublic_Member
{
}
То-есть, расширять он должен несуществующий класс, который имеет имя XFCP_ВашКласс. Эту хитрость обработает внутренний загрузчик классов, это уже его работа.

Остается только создать в своем классе такой же метод, как в расширяемом, и возвращать из него такие же типы результатов.
PHP:
class MyAddon_ControllerPublic_Member extends XFCP_MyAddon_ControllerPublic_Member
{
    public actionEdit()
    {
        // получить "ответ" родительского класса, если нужно
        $response = parent::actionEdit();
        // ваши действия

       // возвратить либо родительский ответ с изменениями, либо другой объект типа XenForo_ControllerResponse
       return $response;
    }
}
 
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу