Обзор новых sparks
Сообщество 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.
Отличный обзор.
Не плохо было бы рассмотреть все спарки, и выбрать лучшие.