Обзор новых sparks

9th Февраль 2012 | Категории: Code Igniter, PHP | Метки:

Сообщество Sparks для фреймворка CodeIgniter продолжает развиваться. Пользователи активно добавляют свои полезные библиотеки, число которых перевалило за 50. За последний месяц было добавлено 4 библиотеки, заслуживающих нашего внимания.

Для тех, кто не знает, о чем идет речь, есть вводная статья про Sparks.

messages

Для чего:
Библиотека для сохранения и отображения сообщений (предупреждение, информация, ошибки).
Страница на Sparks: messages.

Установка из консоли:

php tools\spark install -v1.0.1 messages

Когда использовать:
Библиотека используется для информирования пользователя о реакции системы на его действия. К примеру, «добавлена новая запись». Сообщение нужно показать только один раз — после добавления записи, сразу после редиректа страницы (редирект при добавлении или редактировании записи нужен для предотвращения повторного отправления формы).

Стандартный функционал CodeIgniter:
Базовый функционал этой библиотеки уже реализован в CodeIgniter с помощью Flashdata библиотеки Session. Но jenssegers, в своей библиотеке, сделал более удобным использование этого механизма.

Примеры использования:
Данные добавляются почти так же, как и в стандартной библиотеке session, только вдобавок мы указываем тип сообщения:

$this->messages->add("Ошибка чтения файла с диска", "error");
$this->messages->add("Спасибо за регистрацию", "success");
$this->messages->add("5 минут. Полет нормальный.", "message");

Чтобы получить все сообщения используется метод get():

$messages = $this->messages->get();

Или же можно получить сообщения определенного типа, который мы указали при добавлении:

$messages = $this->messages->get("error");

В переменной $messages будет находиться массив с сообщениями, которые можно перебрать через foreach.

$messages = $this->messages->get("error");
    foreach($messages as $error)
        echo 'error: '.$error.'<br>';

Если мы получаем все записи, то необходим внешний цикл, который сначала переберет все типы записей:

$all = $this->messages->get();
    foreach($all as $type=>$messages)
        foreach($messages as $message)
            echo $type.': '.$message.'<br>';

При вызове метода get(), сохраненные сообщения возвращаются и удаляются из памяти. Но также существует метод для принудительного очищения сообщений:
всех —

$this->messages->clear();

определенного типа —

$this->messages->clear("error");

Оценка: 5/5.

perm

Для чего:
Библиотека для проверки прав доступа. Позволяет проверять групповые права, права на действия. Учитывает иерархию прав. Права сохраняются в базе данных. Класс имеет метод для создания структуры таблиц.

Страница на Sparks: perm.

Установка из консоли:

php tools\spark install -v0.1.0 perm

Когда использовать:
Необходимость проверки прав доступа к различным элементам сайта. К примеру, чтобы удалить запись необходимо наличие админских или модераторских прав, а для добавления нового пользователя — только админ. Внимание! При сложной иерархии прав возможно значительное падение производительности. Хорошо бы использовать кэширование прав.

Стандартный функционал CodeIgniter:
Подобный функционал «из коробки» отсутствует.

Примеры использования:
Для проверки прав для группы используется метод in_group() с указанием названия или id группы:

$this->perm->in_group(3);
$this->perm->in_group('admin');

Для проверки прав для роли используется метод has_role():

$this->perm->has_role('users_create');

Возможно указание нескольких ролей сразу:

$required_roles = array('admin', 'users');
$this->perm->has_roles($required_roles);

Примечание: метод has_roles() является синонимом метода has_role().

Основной фишкой, обычно отсутствующей в подобных библиотеках, является проверка иерархии ролей. Иерархия указывается через двоеточие. Если у пользователя есть хотя бы одна из этих ролей — метод вернет TRUE:

$this->perm->has_role('admin:users:users_create');

Минусы:
Название таблицы и полей жестко заданы в самом классе. Если вам необходима иная структура и именование полей — придется менять сам класс. Хорошим тоном программирования является использование файла конфигурации для хранения подобных настроек.
Некоторые методы нигде не описаны. К примеру, метод для создания таблиц configure_database(), или же метод инициализации прав доступа setup_user_privileges().
Ждем новых версий.
Оценка: 4/5.

markdown-extra

Для чего:
Библиотека для интеграции проекта с markdown разметкой.

Страница на Sparks: markdown-extra.

Установка из консоли:

php tools\spark install -v0.0.0 markdown-extra

Когда использовать:
Использовать, когда необходима поддержка wiki-синтаксиса. В некоторых проектах использование markdown будет удобней и безопасней чистого HTML или BBCode. За основу взят проект PHP Markdown & Extra. А этот spark — это всего лишь один хелпер-обертка над внешней библиотекой.

Стандартный функционал CodeIgniter:
Подобный функционал «из коробки» отсутствует.

Примеры использования:
Если нужно преобразовать текст из разметки markdown в HTML используется хелпер:

$html = parse_markdown_extra($some_markdown_string);

Минусы:
Бедность и простота библиотеки. Нет комплексного решения. К примеру, не помешала бы markdown-панель для редактирования текста, или конвертирования HTML в markdown. Но если нужен простой парсер markdown, то библиотека вполне подойдет.

Оценка: 2/5.

urilang

Для чего:
Позволяет менять язык приложения автоматически, исходя из URI.

Страница на Sparks: urilang.

Установка из консоли:

php tools\spark install -v1.0.1 urilang

Когда использовать:
При построении мультиязыковых сайтов.

Стандартный функционал CodeIgniter:
Подобный функционал «из коробки» отсутствует.

Примеры использования:
Для начала задаем в конфиге config/urilang.php список поддерживаемых языков:

$config['supported_languages'] = array('en' => 'english', 'ru' => 'russian', 'ua' => 'ukrain');

В файле с роутами config/routes.php добавляем новые правила:

$route['(\w{2})/(.*)'] = '$2';
$route['(\w{2})'] = $route['default_controller'];

А дальше просто загружаем нужный языковой файл:

$this->lang->load('your_language_file');

Библиотека работает прозрачно, больше ничего менять в коде не надо, поэтому её легко подключать даже в готовых проектах. Хотя лучше о многоязычности позаботиться заранее.

Оценка: 5/5.

Subscribe without commenting


  1. phpshka
    18th Февраль 2012 в 17:58

    Отличный обзор.
    Не плохо было бы рассмотреть все спарки, и выбрать лучшие.