Хроники Yii3
618 subscribers
43 photos
1.7K links
Описание процесса разработки фреймворка из первых рук 😎

Обсуждение:
https://t.iss.one/yii3ru

Сводка по всем пакетам:
https://www.yiiframework.com/status/3.0

Поддержать разработчиков:
https://opencollective.com/yiisoft
Download Telegram
🌿 #Полезное

Про Yii3 и не только

Выступление Александра Макарова на VI встрече PHP-сообщества Воронежа с докладом о прошлом, настоящем и будущем Yii.

⚡️ Видео на YouTube
👍224🔥2👾1
#yiisoftView #МажорныйРелиз #Релиз

🎁 Yii View 10.0

• Изменена логика поиска шаблона представления в ViewInterface::render():

1) ./path — если строка начинается c ./, то ищем в директории текущего представления, если представления нет — бросаем исключение.

2) //path — если строка начинается с //, то ищем в базовой директории.

3) Если строка начинается с / (в *nix) или содержит : (в Windows), то используем строку как абсолютный путь.

4) В остальных случаях ищем либо в контексте (если задан), либо в базовой директории.

• Удалён метод ViewInterface::renderFile(), вместо него теперь используется ViewInterface::render().

• Исключение RuntimeException заменено на LogicException для случаев, когда ViewInterface::render() не может разобрать путь к представлению.
👍10👾1
#yiisoftYiiViewRenderer #yiisoftYiiView #МинорныйРелиз #Релиз

🎁 Yii View Renderer 7.1

• Поддерживаемая версия Yii View (yiisoft/view) поднята до ^10.0.
👍6👾1
#yiisoftMailer #МинорныйРелиз #Релиз

🎁 Yii Mailer Library 5.1

• В MessageFactory добавлена возможность указать значение по умолчанию для поля "from".

• Минимальная версия PHP поднята до ^8.1.

• Поддерживаемая версия Yii View (yiisoft/view) поднята до ^10.0.
👍3👾3👨‍💻1
#yiisoftLog #МинорныйРелиз #Релиз

🎁 Yii Logging Library 2.1

• Добавлены новые статические методы в классе Logger:
- assertLevelIsValid(),
- assertLevelIsString(),
- assertLevelIsSupported().

• Добавлена поддержка вложенных значений в переменных шаблона сообщения, например {foo.bar}.

• Добавлены провайдеры контекста (подробнее в документации).

• Добавлена поддержка DateTime и DateTimeImmutable в качестве метки времени в контексте.

• В классе Message добавлены методы category(), trace(), time() и константа DEFAULT_CATEGORY.

• Константа CategoryFilter::DEFAULT помечена устаревшей.

• В классе Logger помечены устаревшими методы:
- validateLevel(),
- setTraceLevel(),
- setExcludedTracePaths().

• В классе Target помечены устаревшими методы:
- setCommonContext(),
- getCommonContext().

• При генерации сообщений для исключений заменён метод gettype() на get_debug_type().

• В конструкторе Message тип параметра $level изменён на string.

• Исправлена ошибка при парсинге сообщений, содержащих переменные, которые нельзя привести к строке.

• Исправлена ошибка при форматировании трейса, когда нет значений "file" и "line".
👍9👾1
#yiisoftHtml #МинорныйРелиз #Релиз

🎁 Yii HTML 3.5

• Добавлен класс для тега <hr> и соответствующий метод Html::hr().

• Добавлена поддержка массивов в качестве значения атрибута aria-describedby.
👍3🤡3👾1
#yiisoftErrorHandler #МинорныйРелиз #Релиз

🎁 Yii Error Handler 3.3

• Добавлена кнопка для копирования cURL-запроса.

• Отсортированы заголовки в информации о запросе.

• Упрощён код, генерирующий сообщения для лога ошибок.

• В трейсе добавлена возможность посмотреть полный список аргументов.

• Добавлена возможность настройки глубины регистрации shutdown-функции, вызывающей exit(1), по умолчанию — 2.

• Мелкие исправления в интерфейсе.
👍4🔥1👾1
#yiisoftYiiSentry #ПатчРелиз #Релиз

🎁 Yii Sentry 2.0.1

• Добавлена поддержка psr/http-message версии ^2.0.
👍71👾1
#yiisoftYiiRunnerHttp #МажорныйРелиз #Релиз

🎁 Yii HTTP Runner 3.0

• Добавлена возможность изменить размер буфера используемого при отправки содержимого ответа.

• Добавлена возможность задать любой PSR-совместимый логгер для сбора ошибок, которые могут возникнуть в процессе создания контейнера. По умолчанию, NullLogger.

• Удалён класс ServerRequestFactory.

• Класс SapiEmitter помечен только для внутреннего использования.

• Исправлена некорректная обработка ответов с незакрытыми буфферами вывода.
👍10👾2🎉1
#yiisoftValidator #МажорныйРелиз #Релиз

🎁 Yii Validator 2.0

• Добавлено правило InEnum, проверяющее, что значение соответствует одному из значений типизированного перечисления.

• В именах классов/трейтов/методов/переменных слово "attribute" заменено на "property".

• Переименованы правила:
- AtLeastFilledAtLeast;
- OneOfFilledOnlyOneOf.

• При создании правила FilledAtLeast добавлена проверка, что значение свойства $min меньше или равно количеству проверяемых свойств.

• Добавлен PHP-атрибут Label позволяющий задать имя свойства в сообщениях об ошибках валидации.

• Интерфейс RuleWithOptionsInterface переименован в DumpedRuleInterface.

• Метод getName() перемещён из метода RuleInterface в DumpedRuleInterface.

• Параметр $rules в методе RulesNormalizer::normalize() сделан опциональным.

• Выполнен рефакторинг метода Result::add(): для повышения производительности использование метода array_merge() вынесено за цикл foreach.

• Выполнен рефакторинг обработчика правила Json. Для проверки вместо регулярного выражения теперь используются встроенные функции json_validate(), json_decode() и json_last_error().

• Изменён тип параметра $escape в методе Error::getValuePath() с bool|string|null на string|null.

• Изменён тип параметра $skipOnEmpty в конструкуторах правил с mixed на bool|callable|null.

• Изменён тип параметра $rule в методе RuleHandlerInterface::validate() с object на RuleInterface.

• Для правил, не реализающих DumpedRuleInterface, RulesDumper теперь использует в качестве имени полное имя класса правила.

• Встроенные правила валидации в качестви имени правила теперь возвращают полное имя класса.

• В контекст валидации добавлен параметр Each::PARAMETER_EACH_KEY, доступный во время обработки правила Each и содержащий текущий ключ.

• В сообщения об ошибках валидации добавлены имена валидируемых свойств.

• Во встроенных правила в сообщения о некорректном типе валидируемого значения добавлен тип значения.

• Улучшены сообщения об ошибках валидации в правилах Json, FilledOnlyOneOf и FilledAtLeast.

• Исправлено: правила валидации, заданные в виде PHP-атрибутов объекта, не учитывались при нормализации через RulesNormalizer::normalize().

• Исправлено: при использовании правила Nested имя свойства не передавалось в сообщения об ошибках валидации.

• Исправлено: при использовании правила Each в сообщение о некорректном ключе передавался тип значения вместо типа ключа.

• Уточнены типы в psalm-аннотациях в классе Result.

• Минимальная требуемая версия PHP поднята до 8.1.

• Добавлен перевод сообщений об ошибках валидации на немецкий язык.

Инструкция по обновлению на эту мажорную версию описана в файле UPGRADE.md.
👍172🔥2👾1
#yiisoftNetworkUtilities #МинорныйРелиз #Релиз

🎁 Yii Network Utilities 1.1

• Добавлен объект IpRanges, который содержит диапазоны IP-адресов и позволяет проверить входит ли конкретный IP-адрес в эти диапазоны.

• Исправлена ошибка при преобразовании IP-адреса в битовое представление в PHP 8.0+.
👍4👾3
#yiisoftProxyMiddleware #ПатчРелиз #Релиз

🎁 Yii Proxy Middleware 1.0.2

• Зависимость от yiisoft/validator заменена на более простую yiisoft/network-utilities.
👍7👾2
#yiisoftHydratorValidator #ПатчРелиз #Релиз

🎁 Yii Validating Hydrator 2.0.1

• Добавлена поддержка yiisoft/validator версии ^2.0.
👍6👾3
#yiisoftInputHttp #ПатчРелиз #Релиз

🎁 Yii Input HTTP 1.0.1

• Добавлена поддержка yiisoft/validator версии ^2.0.
👍6👾3
#yiisoftHydrator #МинорныйРелиз #Релиз

🎁 Yii Hydrator 1.3

• Добавлена поддержка гидрирования неинициализированных readonly свойств.

• Добавлена поддержка коллекций через атрибут Collection.

• Гидратор добавлен в качестве зависимости в ParameterAttributesHandler (можно установить через новый метод withHydrator()) и ParameterAttributeResolveContext (можно получить через новый метод getHydrator()).
👍11👾1
#yiisoftAuthJwt #МинорныйРелиз #Релиз

🎁 Yii Auth JWT 2.1

• В зависимостях пакеты web-token/* заменены на один web-token/jwt-library, минимальная версия PHP поднята до 8.1.

• Добавлена поддержка psr/http-message для версий ^2.0.
👍9🔥2
#yiisoftHtml #МинорныйРелиз #Релиз

🎁 Yii HTML 3.6

• Добавлена поддержка перечислений (enum) в качестве значения в виджетах CheckboxList и RadioList.

• Добавлена поддержка Stringable-объектов и массивов в качестве значения для тега <textarea>.

• Добавлено исключение, возникающее при передаче некорректных имён HTML-атрибутов (пустое имя или содержащее запрещённые символы).

• Исправлено: теперь вложенные атрибуты (data и другие) не выводятся, если содержат значение null.
2👍6👾1
#yiisoftHydrator #МинорныйРелиз #Релиз

🎁 Yii Hydrator 1.4

• Добавлен PHP-атрибут ToArrayOfString, позволяющий привести значение к массиву строк.

• В коллекциях добавлена поддержка типизированных перечислений.
1🔥5
#yiisoftForm #ПервыйРелиз #МажорныйРелиз #Релиз

🎁 Yii Form 1.0

Пакет содержит набор виджетов для генерации HTML-кода полей форм с поддержкой тем (из коробки поддерживается Bootstrap 5).

Пример использования:

use Yiisoft\Form\PureField\Field;

echo Field::text('firstName', theme: 'horizontal')
->label('First Name')
->autofocus();
echo Field::text('lastName', theme: 'horizontal')
->label('Last Name');
echo Field::select('sex')
->label('Sex')
->optionsData(['m' => 'Male', 'f' => 'Female'])
->prompt('—');
echo Field::number('age')
->label('Age')
->hint('Please enter your age.');
echo Field::submitButton('Submit')
->buttonClass('primary');
3👍141
#yiisoftFormModel #ПервыйРелиз #МажорныйРелиз #Релиз

🎁 Yii Form Model 1.0

Пакет предоставляет основу для реализации моделей форм и помогает в их наполнении, валидации и отображении.

Пример формы:

use Yiisoft\FormModel\Attribute\Safe;
use Yiisoft\FormModel\FormModel;
use Yiisoft\Validator\Rule\Email;
use Yiisoft\Validator\Rule\Length;
use Yiisoft\Validator\Rule\Required;

final class LoginForm extends FormModel
{
#[Label('Your login')]
#[Required]
#[Length(min: 4, max: 40, skipOnEmpty: true)]
#[Email(skipOnEmpty: true)]
private ?string $login = null;

#[Label('Your password')]
#[Required]
#[Length(min: 8, skipOnEmpty: true)]
private ?string $password = null;

#[Label('Remember me for 1 week')]
#[Safe]
private bool $rememberMe = false;
}


Пример обработки формы:

public function login(
RequestInterface $request,
FormHydrator $formHydrator
): ResponseInterface
{
$formModel = new LoginForm();
if ($formHydrator->populateFromPostAndValidate($formModel, $request)) {
$errors = $formModel->getValidationResult()->getErrorMessagesIndexedByProperty();
}
// You can pass $formModel and $errors to the view now.
}


Пример отображения формы:

use Yiisoft\FormModel\Field;
use Yiisoft\FormModel\FormModel;

echo Field::text($formModel, 'login');
echo Field::password($formModel, 'password');
echo Field::checkbox($formModel, 'rememberMe');
20🔥13👍5🎉2
#yiisoftNetworkUtilities #МинорныйРелиз #Релиз

🎁 Yii Network Utilities 1.2

• В IpHelper добавлены константы IP_PATTERN и IP_REGEXP для проверки IP обеих версий (IPv4 и IPv6).

• В IpRanges добавлена константа NEGATION_CHARACTER, используемая для определения диапазонов методом исключения.

• В IpHelper добавили методы: isIpv4(), isIpv6(), isIp().
32👍4