26

Re: [Релиз] Разработка расширения "Developer Helper"

1. Добавлен фильтр контроллера, чтобы предотвратить передачу "неправильных" параметров. По-умолчанию включен фильтр параметра id, он должен быть типа int.
Фильтр устанавливается в конструкторе контроллера:

$this->set_filter(array(
        'id' => 'int',
        'param_name2' => 'bool',
        'param_name3' => 'float',
        'param_name4' => 'string',
        'param_name5' => 'array',
        'param_name6' => 'object'
));

Если будет запрос вида r=my_extension/controller/action/id/test
то фильтр его не пропустит, т.к. для id ожидается тип int

Возможна установка одиночного фильтра без передачи массива:

$this->set_filter( 'id', 'string');

2. Добавлена функция генерирования пажинации в App.
Теперь вместо кода:

$forum_page['num_pages'] = ceil(($cur_topic['num_replies'] + 1) / $forum_user['disp_posts']);
$forum_page['page'] = (!isset($_GET['p']) || !is_numeric($_GET['p']) || $_GET['p'] <= 1 || $_GET['p'] > $forum_page['num_pages']) ? 1 : $_GET['p'];
$forum_page['start_from'] = $forum_user['disp_posts'] * ($forum_page['page'] - 1);
$forum_page['finish_at'] = min(($forum_page['start_from'] + $forum_user['disp_posts']), ($cur_topic['num_replies'] + 1));

можно вызвать например:

App::paginate($total_count, $items_per_page, App::$forum_url['topic']);

3. В контроллер добавлена функция проверки токена. Например если мы делаем простейшую операцию типа выхода, мы добавляем токен в параметры GET.
Для таких случаев сделана функция

$this->_check_csrf_token($generated_token)

Добавляем токен к ссылке, а потом при обработке сверяем свое сгенерированное значение $generated_token с тем которое прислали.

Захочешь — найдешь время, не захочешь — найдешь причину.

Поделиться

27

Re: [Релиз] Разработка расширения "Developer Helper"

Новая версия: http://punbb.ru/downloads/v14/developer_helper.zip
Полноценный пример: http://punbb.ru/downloads/v14/reputation.zip

Оба расширения адаптированы под punbb 1.4, репутация не будет работать на 1.3, т.к. используется flash_messenger.

В примере в полный рост используются возможности хелпера. Для демонстрации внедрения хуков, из манифеста репутации были убраны все хуки кроме тех, без которых никак не обойтись - подключение схем реврайта и инициализация диспетчера хуков. Остальные обработчики хуков внедряются в диспетчере. Еще раз подчеркну, что такой подход избран исключительно для демонстрации возможностей, вместо диспетчера хуков их можно было оставить в манифесте.

Код репутации, за счет использования хелпера, стал удобочитаем, структурирован. Его просто изменять, добавлять фичи и т.п.

Захочешь — найдешь время, не захочешь — найдешь причину.

Поделиться

28

Re: [Релиз] Разработка расширения "Developer Helper"

Извиняюсь за может быть тупой вопрос, но...

hcs пишет:

такой подход избран исключительно для демонстрации возможностей, вместо диспетчера хуков их можно было оставить в манифесте

Влияет ли это как то на скорость, стабильность и т.д.? То есть оправдан ли такой способ кроме как демонстрации?

Не забываем ставить плюсики дополнительно к «спасибам».

Поделиться

29

Re: [Релиз] Разработка расширения "Developer Helper"

Я думаю, что особо никак не влияет, вместо прямого eval кода будет загружен класс, который исполнит этот код. Одна дисковая операция. В череде таких постоянных операций одной больше одной меньше.

Захочешь — найдешь время, не захочешь — найдешь причину.

Поделиться