Хроники 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
#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
#yiisoftMiddleware #ПатчРелиз #Релиз

🎁 Yii Middleware 1.0.4

• Добавлен пакет yiisoft/network-utilities в качестве зависимости и использован вместо пакета yiisoft/validator для фильтра IpFilter.

• Добавлена поддержка для yiisoft/validator версий ^2.0, зависимость помечена как deprecated.
10👍4
#yiisoftSwagger #МинорныйРелиз #Релиз

🎁 Yii Swagger 2.1

• Добавлена поддержкаpsr/http-message для версий ^2.0.

• Требуемая версия yiisoft/yii-view обновлена до ^7.1.

• Добавлены экшены \Yiisoft\Swagger\Action\SwaggerJson и \Yiisoft\Swagger\Action\SwaggerUi. Классы \Yiisoft\Swagger\Middleware\SwaggerJson и \Yiisoft\Swagger\Middleware\SwaggerUi помечены как deprecated. Они будут удалены в следующей мажорной версии.

• Добавлена поддержка swagger-api/swagger-ui 5й версии.
51👍4🔥2
#yiisoftSwagger #ПатчРелиз #Релиз

🎁 Yii Swagger 2.1.1

• Зависимость yiisoft/yii-view заменена на yiisoft/yii-view-renderer.
7👍4🔥3
#yiisoftValidator #МинорныйРелиз #Релиз

🎁 Yii Validator 2.1

• Правила валидации объекта, описанные в виде PHP атрибутов теперь объединяются с правилами, заданными в методе getRules() при реализации интерфейса RulesProviderInterface.

• Выполнен рефакторинг правила Ip с более плотным использованием пакета yiisoft/network-utilities.

• Добавлен метод Ip::getIpRanges().

• Методы Ip::getRanges(), Ip::getNetworks() и Ip::isAllowed() помечены устаревшими и будут удалены в следующем мажорном релизе.
7🔥5🎉3
#yiisoftFormModel #ПатчРелиз #Релиз

🎁 Yii Form Model 1.0.1

• Пакет адаптирован к изменениям в последней версии валидатора. В модели формы разрешено наполнять только те поля, где есть правила валидации. Теперь правила валидации считываются одновременно и с PHP-атрибутов и из метода getRules().
1🔥61
🔥 #yiisoftActiveRecord #News

В пакете yiisoft/active-record методы класса, содержащие слово attribute, были переименованы.

- attributes() -> propertyNames()
- hasAttribute() -> hasProperty()
- getAttribute() -> get()
- getAttributes() -> propertyValues()
- getAttributesInternal() -> propertyValuesInternal()
- getOldAttribute() -> oldValue()
- getOldAttributes() -> oldValues()
- getDirtyAttributes() -> dirtyValues()
- markAttributeDirty() -> markPropertyDirty()
- isAttributeChanged() -> isPropertyChanged()
- setAttribute() -> set()
- setAttributes() -> populateProperties()
- populateAttribute() -> populateProperty()
- setOldAttribute() -> assignOldValue()
- setOldAttributes() -> assignOldValues()
- updateAttributes() -> updateProperties()

Переименование сделано, чтобы в будущем избежать путаницы с PHP атрибутами #[Attribute].
👍143🔥2
#yiisoftHydrator #МинорныйРелиз #Релиз

🎁 Yii Hydrator 1.5

• Добавлен тайпкастер EnumTypeCaster, позволяющий приводить значение к перечислению. Например, приведение строки draft к перечислению Status::DRAFT.

• Исправлена ошибка с заполнением свойств только для чтения из родительских классов.
11👍8
#yiisoftHtml #МинорныйРелиз #Релиз

🎁 Yii HTML 3.7

• В теге Script добавлен методы nonce() и getNonce() для более удобной реализации CSP.

• В теге Select добавлена поддержка типизированных перечислений в качестве значения.
8👍4🏆21
#yiisoftForm #МинорныйРелиз #Релиз

🎁 Yii Form 1.1

• Добавлена поддержка типизированных перечислений в качестве значений поля Select.
11👍5
#yiisoftView #МажорныйРелиз #Релиз

🎁 Yii View 11.0

• В методе ViewInterface::getParameter() добавлен variadic-параметр $default.

• Удалены устаревшие методы withDefaultExtension() и getDefaultExtension() из интерфейса ViewInterface.

• В конфигурации пакета параметр defaultExtension переименован в fallbackExtension.

• Минимальная версия PHP увеличена до 8.1 и выполнен соответствующий рефакторинг.

• Улучшены psalm-типы результатов методов в классе WebView: getLinkTags(), getCss(), getCssFiles(), getJs() и getJsFiles().

• Исправлено некорректное поведение при использовании пустой строки или строки "0" в качестве ключа в методах WebView: registerCss(), registerStyleTag(), registerCssFile(), registerJs(), registerScriptTag() и registerJsFile().
4👍8
#yiisoftYiiViewRenderer #yiisoftYiiView #МинорныйРелиз #Релиз

🎁 Yii View Renderer 7.2

• Добавлена поддержка Yii View версии ^11.

• Минимальная версия PHP увеличена до 8.1 и выполнен соответствующий рефакторинг.
1👍52🔥2
#yiisoftMailerView

Yii Mailer View

Создан новый репозиторий yiisoft/mailer-view, в который из основного пакета Yii Mailer будет вынесен функционал для генерации содержимого письма на основе шаблонов.

Это позволит сделать абстракцию Yii Mailer более стабильной и не зависящей ни от чего.
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥103
#yiisoftView #ПатчРелиз #Релиз

🎁 Yii View 11.0.1

• Зависимость psr/event-dispatcher сделана опциональной.
1👍7
#yiisoftForm #МинорныйРелиз #Релиз

🎁 Yii Form 1.2

• Добавлен метод Checkbox::labelPlacement(), позволяющий задать место расположения названия поля:
- в соответствии с шаблоном поля;
- обернуть чекбокс в тег <label> (по умолчанию);
- сбоку от чекбокса.

• Метод Checkbox::enclosedByLabel() помечен как устаревший.
👍7👾21
#yiisoftDi #МинорныйРелиз #Релиз

🎁 Yii Dependency Injection 1.3

• Добавлен шорткод TagReference::to() для тегов.

• Улучшено использование NotFoundException для случаев с дефинишенами.

• Выполнен небольшой рефакторинг для улучшения производительности контейнера.

• В методах ContainerConfig::withStrictMode() и ContainerConfig::withValidate() для параметра добавлено значение по умолчанию true.

• Минимальная версия PHP поднята до 8.1 и выполнен соответствующий рефакторинг.
👍32👾2
#yiisoftMailer #МажорныйРелиз #Релиз

Существенно переработана абстракция для отправки сообщений электронной почты.

Теперь пакет ни от чего не зависит и, фактически, абстракция состоит из двух интерфейсов: MessageInterface (сообщение с методами для установки/получения значений) и MailerInterface (сервис для отправки сообщений с двумя методами: send и sendMultiple).


🎁 Yii Mailer 6.0

• Добавлены простые реализации мейлера NullMailer и StubMailer.

• В конфигурацию пакета добавлена настройка FileMailer.

• Добавлен класс HtmlToTextBodyConverter для преобразования HTML-содержимого письма в текстовое содержимое.

• Добавлено перечисление Priority, которое используется вместо числового значения приоритета.

• Изменён MessageInterface:
- добавлены методы getAttachments(), getEmbeddings(), getHeaders(), withAddedAttachments() и withAddedEmbeddings();
- переименован метод withEmbedded() в withEmbeddings();
- переименован метод withAttached() в withAttachments();
- в методы withEmbeddings() и withAttachments() добавлено возможность передавать несколько файлов;
- удалены методы compose(), withTemplate() и withLocale();
- удалены методы getError() и withError().

• Добавлен класс Messsage, реализующий MessageInterface.

• Удалены MessageFactoryInterface и MessageFactory. Вместо фабрики сообщения добавлен класс MessageSettings, который передаётся в мейлер и позволяет донастроить сообщение перед отправкой.

• Переработан абстрактный класс для создания мейлеров:
- класс переименован из Mailer в BaseMailer;
- удалены методы beforeSend() and afterSend();
- финализированы методы;
- зависимости помечены как только для чтения.

• Удалены классы MessageBodyRenderer и MessageBodyTemplate.

• Переработаны классы событий AfterSend и BeforeSend:
- удалён метод getMessage();
- свойство $message сделано публичным и только для чтения;
- в BeforeSend удалена реализация StoppableEventInterface;
- в BeforeSend добавлено свойство $preventSendingMessage, позволяющее отменить отправку сообщения.

• Тип результата методов MessageInterface::with* изменён с self на static.

• Добавлен класс SendResults, который используется как результат выполнения метода MailerInterface::sendMultiple().

• Доработан текст сообщения в исключении, которое выбрасывается, когда callback для получения имени файла в FailMailer возвращает не строковое значение. Само исключение изменено с RuntimeException на LogicException.

• Удалена зависимость от yiisoft/view.

• Зависимость psr/event-dispatcher сделана опциональной.
👍51😱1👀1🤝1👾1
#yiisoftMailerSymfony #МажорныйРелиз #Релиз

🎁 Yii Mailer Symfony Mailer Extension 4.0

• Пакет адаптирован к Yii Mailer 6:
- удалён класс Message;
- в конструкторе мейлера добавлен параметр $messageSettings;
- удалено использование MessageBodyRenderer.

• Исправлено: для вложений не использовался ID файла.

• Изменения в конфигурации пакета:
- удалена конфигурация FileMailer;
- в параметрах удалён ключ writeToFiles;
- в парамтерах ключ symfony/mailer изменён на yiisoft/mailer-symfony.

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

• Зависимость psr/event-dispatcher сделана опциональной.
3👍2👾1
#yiisoftMailerView

Пакет Yii Mailer View закрыт. В процессе разработки столкнулись с тем, что в текущем виде он практически бесполезен. Возможно, в будущем интеграция Yii Mailer и Yii View будет переосмыслена и разработка возобновится.
😁4🤔2👍1😢1👾1