Обновить
0

Yii *

Фреймворк, реализующий парадигму MVC

Сначала показывать
Порог рейтинга
Уровень сложности

Альтернативная организация проекта на Yii2

Время на прочтение9 мин
Количество просмотров13K

Как предлагается создавать проект на Yii2 сейчас? Выбираете шаблон проекта: basic или advanced, форкаете себе, потом пишете и комитите туда. Бам! Случилась копипаста, ваш проект и шаблон теперь развиваются отдельно. Вам не получить исправлений, внесенных, в шаблон, а в yii2-app-basic, естественно, не возьмут доработок специфических для вашей задачи. Это проблема номер один.


Как расширяется проект на Yii2? Выбираете подходящие расширения и подключаете их с помощью композера. Находите пример конфига этого расширения в README и копипастите в конфиг своего приложения. Оопс… Опять копипаста. Вылазящяя разными боками, в том числе таким: в большом проекте используется много расширений — конфиг приложения становится огромным и просто нечитаемым. Это проблема номер два.


Как эти проблемы связаны? Первая решается так: выделяем переиспользуемый код и превращаем в расширение. И снова здравствуйте: у расширения есть свой конфиг — получили вторую проблему.


Наиболее остро эти проблемы стоят для повторно используемых решений, когда надо поднимать много/несколько, в принципе одинаковых проектов, но с большими/маленькими изменениями. Плюс избавление от копипасты и переиспользование кода ещё никому не мешало.


Хочу поделиться своим вариантом решения этих проблем.


Читать дальше →

Ещё одна система логирования, теперь на ElasticSearch, Logstash, Kibana и Prometheus

Время на прочтение13 мин
Количество просмотров52K


Всем разработчикам известна ситуация, когда приложение заглючило и пользователь не может сделать то, что ему нужно. Причины разные: пользователь ввёл неправильные данные, у него медленный интернет и многое другое. Без системы логирования разобрать эти ошибки сложно, а порой невозможно. С другой стороны, система логирования — хороший индикатор проблемных мест в работе системы. Я расскажу, как построить систему логирования в своём проекте (да, ещё раз). В статье расскажу об Elasticsearch + Logstash + Kibana и Prometheus и как их заинтегрировать со своим приложением.

Читать дальше →

Готовимся к собеседованию по PHP: Всё, что вы хотели узнать об интерфейсах, совместимости сигнатур и не побоялись узнать

Время на прочтение6 мин
Количество просмотров114K
imageИнтерфейсы, впервые появившись в PHP 5, давно уже заняли прочное место в объектно-ориентированной (или всё-таки правильнее «класс-ориентированной»?) части языка.

Казалось бы — что может быть проще интерфейса? "Как бы класс, но и не класс, нельзя создать экземпляр, скорее контракт для будущих классов, содержит в себе заголовки публичных методов" — не правда ли, именно такими словами вы чаще всего отвечаете на собеседовании на дежурный вопрос о том, что такое интерфейс?

Однако не всё так просто, как может показаться начинающему программисту на PHP. Привычные аналогии не работают, руководство по языку вводит вас в заблуждение, в коде таятся неожиданные «подводные камни»…

Три предыдущие части:

Проверьте себя: всё ли вы знаете об интерфейсах в PHP?

Запущено голосование за доклады YiiConf

Время на прочтение2 мин
Количество просмотров3.5K

Добрый день, коллеги! На YiiConf пришло много заявок — 12 докладов и 2 мастер-класса. Впервые на одной конференции будут выступать сразу четыре разработчика из Yii core team.


Читать дальше →

«Runn Me!» — говорит нам очередной фреймворк* на PHP. А слышится «Throw Me!». Часть 2

Время на прочтение6 мин
Количество просмотров7.2K
* вообще говоря это пока еще не фреймворк, а просто набор библиотек, фреймворком он станет чуть позже


Не прошло и недели с момента «безумного успеха» (тут мнения немного расходятся, конечно...) первой части нашего повествования, как пришло время выпустить вторую.

Сегодня мы продолжаем путешествие в бездонную глубину библиотеки runn/core будущего фреймворка «Runn Me!». Под катом нам встретятся следующие обитатели бездны:

  • Концепция «мультиисключения» и ее реализация в библиотеке
  • Понятие объекта с внутренней валидацией и эталонная реализация такого объекта
  • Немного заглянем в мир валидаторов и санитайзеров (подробный рассказ о них будет позже)
  • Рассмотрим реализацию объекта с обязательными полями

Вперед!

Уточка говорит «кря-кря», коровка говорит «му-му», «Runn Me!» — говорит нам очередной фреймворк* на PHP. Часть 1

Время на прочтение9 мин
Количество просмотров20K
«О нет!», воскликнет читатель, утомлённый разными мини-микро-слим-фреймворками и QueryBuilder-ами и будет прав.

Нет ничего скучнее, чем очередной фреймворк на PHP. Разве что «принципиально новая» CMS или новый дейтинг.



Так зачем же я с упорством, достойным лучшего применения, шагаю по неудобным подводным камням и выставляю на потеху публике суд товарищей своё творение? Заранее зная, что гнев критиков, как мощное цунами обрушится на этот пост и похоронит его на самом днище Хабра?

Не знаю. Как не знал в своё время Колумб, зачем он отплывает от уютных берегов Испании. Надеялся ли он найти путь в Индию? Конечно да. Но не знал точно — доплывёт ли?

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

Что вас ждет под катом?

  • Открытый исходный код, лицензия LGPL
  • Код, полностью совместимый с PHP 7.0-7.2
  • 100% покрытие юнит-тестами
  • Библиотеки, проверенные временем в реальных проектах (и только проклятая прокрастинация мешала мне опубликовать их ранее!)

Ну и, разумеется, история изобретения очередного велосипеда на костыльном приводе фреймворка*!

* вообще говоря это пока еще не фреймворк, а просто набор библиотек, фреймворком он станет чуть позже

Вперед!

Обновился плагин Yii2support для PhpStorm

Время на прочтение1 мин
Количество просмотров3.9K
Вышла новая версия плагина для yii2. Основой упор был сделан на работу с базой данных, и для использования всего функционала необходимо создать подключение к базе данных.

После создания подключения начнет работать auto complete таблиц и колонок в следующих случаях:

  • Методы ActiveQuery (ActiveRecord::find())
  • Методы ActiveRecord, которые предполагают ввод condition
  • Методы внутри миграций
  • Методы внутри кастомного ActiveQuery
  • В методе ActiveRecord:relations()

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

Так же плагин проверяет properties таги на соответствие структуре базы данных и дополняет их при необходимости.

Что дальше: в разработке сейчас auto complete для Url::to и auto complete в методе Model::rules()

Yii2-advanced: Гибкая настройка Yii2 RBAC (роли, разрешения, правила)

Время на прочтение8 мин
Количество просмотров37K

У админа может и не быть доступа к разрешению пользователя и в пределах одной роли пользователи могут иметь разный доступ к разрешениям


Как организовать сущности Role,Permission,Rule


Роли (role): типовые роли supper_admin,admin,customer (сотрудник, менеджер),user (авторизированный пользователь),guest (не авторизированный пользователь). Роль supper_admin наследует от всех ролей разрешения благодаря этому supper_admin имеет доступ ко всем permission не зависимо от их наличия в конкретной роли но требуется пропуск во всех правилах;

Разрешения (permission): роль является прямым родителем разрешения, без наследования (кроме роли supper_admin).Другими словами, одно и тоже разрешение будет назначаться каждой нужной роли.
Правила (Rule): правила для ролей и для разрешений наследуются от BaseRole в котором присутствует проверка общих правил.

От вас потребуется закодировать админку для ролей , разрешений , разрешений пользователя.
Что там должно быть:
Админка для ролей.
Добавление, удаление, обновление разрешений.

Админка для разрешений.
Добавление, удаление.

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

YiiConf 2017, Москва 16 июня

Время на прочтение2 мин
Количество просмотров5K

Этим летом, 16 Июня 2017, в Москве пройдёт конференция веб-разработчиков, посвящённая PHP фреймворку Yii.



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

Читать дальше →

Yii 1.1.18

Время на прочтение1 мин
Количество просмотров6K

Команда PHP фреймворка Yii выпустила релиз версии 1.1.18. Скачать архив можно с тут.


Ветка 1.1 уже достигла EOL. Дополнительные исправления, если будут, то по части безопасности и совместимости с PHP 7.


Релиз 1.1.18 позволяет обновить PHP на сервере со старым Yii 1.1 до поддерживаемой командой PHP. Yii 1.1.18 совместим с PHP 7.1. Патчи безопасности для этой версии PHP будут выпускаться до 1 декабря 2019.

Читать дальше →

Опрос. Какой php-фреймворк вы используете?

Время на прочтение1 мин
Количество просмотров42K
Давно не делали опрос о популярности php-фреймворков. Это, конечно, не волшебный мир JavaScript, где всё меняется каждые полгода-год, но всё-таки и в php тоже постоянно идут изменения.

Выпускаются новые версии, что-то устаревает, что-то входит в моду и т.д. Один фреймворк более «компонентный» и лучше следует принципам SOLID, другой удобен для быстрого старта, третий имеет хорошее комьюнити.

Итак, опрос для тех, кто использует php в своей практике.
Читать дальше →

Обновился Yii2 плагин для PhpStorm

Время на прочтение1 мин
Количество просмотров9.7K
В новой версии yii2support для phpStorm появилось автодополнение для массивов, используемых в Yii повсеместно для инициализации объектов. Массивы принимает как конструктор базового класса Object, так и метод Yii::createObject. Это очень удобный функционал, удобство которого было ограничено отсутствием поддержки в IDE. Теперь это проблема решена, и работает не только автодополнение, но и всплывающая помощь, переходы на декларацию и обратно, переименование свойств, исправление опечаток.
Читать дальше →

Stacker: что нового?

Время на прочтение2 мин
Количество просмотров9.1K
Frameworks a lot - he's one!

Привет, Хабр!) Тем, кто пока не имеет представления, советую почитать предыдущую статью А если кратко, то речь пойдет об окружении для локальной веб разработки, которое полностью настроено и готово для запуска большинства фреймворков и cms. Запускайте Symfony, Laravel, Yii2, и другие фреймворки легко! По принципу клонировал -> запустил. Забудьте про постоянные настройки веб сервера и рабочего окружения. Все что вам нужно уже есть в Stacker


Основные лозунги проекта


Их много — он один!
Все просто, не нужно миграций!
Быстро развернул и начал работать!
Хватит настраивать! Пиши код!
Держи зоопарк под Docker, пусть хостовая машина остается чистой!

Читать дальше →

Ближайшие события

Логирование в Yii 2.0 и PSR-3

Время на прочтение2 мин
Количество просмотров12K

На дворе 2017-ый год и довольно значительная часть сообщества PHP пытается использовать
PSR: PHP standard recommendation, цель которых — дать возможность заменять отдельные части фреймворков. Среди PSR-ов есть PSR-3, в котором описывается интерфейс для логгера. На данный момент существует множество совместимых с PSR-3 библиотек, в числе которых широко применяемый Monolog.


На тему PSR-3 и Yii 2.0 часто задают следующие вопросы:


  1. Почему Yii 2.0 не совместим с PSR-3?
  2. Как мне писать сообщения в совместимый с PSR-3 логгер?
  3. Есть ли в планах сделать логгер Yii совместимым с PSR-3 и выпилить в отдельный пакет?

Разберём каждый подробно.

Читать дальше →

Yii2, быстрый старт. Самый простой сайт на Yii2 со статическими страницами без использования БД

Время на прочтение3 мин
Количество просмотров20K
Сначала я написал пространное предисловие к этому тексту, а потом удалил его. В общем, этот текст для тех, кто как и я, любит сначала сделать, а потом уже разбираться с тем, что же он такое сделал. Чтобы собрать нижеизложенную информацию мне пришлось три дня усиленно рыться в различных источниках. Так что, надеюсь кому и пригодится. Это годная шпаргалка.

1. Устанавливаете Yii2 Basic на сервер, как написано в документации. Описано там всё четко и по делу, добавить мне нечего.

Разве что вот: локально на OpenServer поставилось без сучка, без задоринки. А вот удаленно, на KVM Ubuntu 16.04 с 1Gb оперативки Composer-у не хватило памяти. Бился часа два, так и не осилил. Благо, что с локального сервера на удаленный, сайт можно легко перенести простым копированием.

2. Повторюсь, установка — basic (допустим, в папку /www/site/basic, но далее мы для простоты изложения будем вести отсчет именно от папки basic в которую вы создали проект, как рекомендуется в руководстве).

Папку basic/web сразу устанавливаете как DocumentRoot — как это сделать, тоже есть в официальном руководстве на русском языке.
Читать дальше →

Yii 2.0: релиз расширения Debug 2.0.8

Время на прочтение1 мин
Количество просмотров6.3K
Состоялся релиз 2.0.8 расширения Debug для фреймворка Yii 2.0. В него вошли два багфикса и 6 улучшений, включающих новые панели и существенные улучшения старых.
Читать дальше →

Yii 2.0.11

Время на прочтение5 мин
Количество просмотров18K

Состоялся релиз PHP фреймворка Yii версии 2.0.11. Инструкции по обновлению и установке можно найти на официальном сайте. Версия 2.0.11 содержит более 110 улучшений и исправлений.


Четыре небольших изменения могут затронуть существующие приложения, так что стоит обратить внимание на UPGRADE.md.


Огромное спасибо нашему замечательному сообществу. Мы сделали это вместе!


За процессом разработки Yii 2 можно следить поставив звёздочку на GitHub. Также у нас есть Twitter и Facebook.


Так как уже ведутся работы над Yii 2.1, убедитесь, что версия фреймворка в composer.json прописана как ~2.0.11. В противном случае после релиза 2.1 проект может поломаться.


Далее мы рассмотрим самые интересные изменения и улучшения, вошедшие в релиз. Полный список доступен в CHANGELOG.

Читать дальше →

Уязвимости выполнения произвольного кода в PHPMailer и SwiftMailer

Время на прочтение3 мин
Количество просмотров24K

В последние дни было зарегистрировано три уязвимости, касающиеся PHPMailer и SwiftMailer:



Все три отчёта об уязвимостях упоминают фреймворк Yii наряду с другими PHP фреймворками как уязвимый, потому цель этой статьи — прояснить, кто именно подвержен этой уязвимости и что нужно сделать для того, чтобы обезопасить себя.

Читать дальше →

Yii2 RESTful API-интерфейс для AngularJS

Время на прочтение8 мин
Количество просмотров32K

Здравствуйте, дорогие читатели! Судя по вашим комментариям к предыдущим статьям, многим из вас очень интересно, как именно мы будем использовать AngularJS в связке с нашим приложение на Yii2 фреймворке. В этой статье я подниму занавес и опишу процесс подключения фреймворка AngularJS и способы его применения.
Читать дальше →

Yii2-advanced: Делаем интернационализацию с источником в Redis

Время на прочтение20 мин
Количество просмотров11K
В Yii2 есть возможность реализовать три варианта интернационализации:

  1. Файл с массивом, вида: ключ=>перевод (гибко)
    Help Link:

    Создадим конфигурационный файл для сборщика


    Выполним консольную команду
    php ./yii message/config @common/config/i18n.php
    //или с комментариями
    php ./yii message/config-template @common/config/i18n.php
    

    p.s. Для windows окружения php yii….Работа с console должна быть настроена т.е. необходимые компоненты должны быть подключены.

    Должен создаться файл /common/config/i18n.php:
    return [
        'sourcePath' => __DIR__. '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR,
        'languages' => ['pt-PT','ru-RU','uk-UA','en-US'], // языки на которые будут использоваться
        'translator' => 'Yii::t',
        'sort' => false,
        'removeUnused' => false,
        'only' => ['*.php'],// расширения файлов в которых искать категории
        'except' => [//исключить эти источники
            '.svn',
            '.git',
            '.gitignore',
            '.gitkeep',
            '.hgignore',
            '.hgkeep',
            '/messages',
            '/vendor',
        ],
        'format' => 'php',// формат хранения переводов
        'messagePath' => __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'messages',
        'overwrite' => true, 
    ];
    


    Создайте папку common/messages для хранения переводов !
Читать дальше →

Вклад авторов