andy87/yii2-lazy-load-trait
Composer 安装命令:
composer require andy87/yii2-lazy-load-trait
包简介
PHP library for lazy load - developed by and_y87
README 文档
README
Вот такая реализация пришла в голову.
Инициализация свойства класса только в момент вызова(обращения к ним). P.S. Знаю что в PHP c версии 8.4 появилась поддержка lazyLoad из коробки, но это ещё не завезли в Yii2.
Установка.
Composer:
composer require andy87/lazy-load-trait
Использование. Порядок дейсвий.
1. Аннотации
Указать свойство в аннотации класса
/** * SomeClass * * @property-read SomeComponent $someComponent // native * @property-read OtherComponent $_otherComponent // singleton * * @package yii2\controllers */ class SomeClass { //... }
2. Добавление use
Для подключения трейта в классе имеется 2 варианта Trait'ов:
andy87\lazy_load\yii2\LazyLoadTrait- для использования в фреймворке Yii2 с применением методаYii::createObject()andy87\lazy_load\LazyLoadTrait- для использования вне фреймворка Yii2
3. Конфигурация свойств
указать конфигурацию в свойстве $lazyLoadConfig
Структура конфигурации.
- для использования свойства как экземпляр класса (без настроек), доступно 2 варианта:
public array $lazyLoadConfig = [ 'someComponent' => SomeComponent::class, // быстрый способ ( меньше проверок ) 'otherComponent' => [ 'class' => OtherComponent::class, // способ поедленней ( больше проверок ) ], ]
- с назначением публичных свойств класса
public array $lazyLoadConfig = [ 'otherComponent' => [ 'class' => OtherComponent::class, 'public_property_1' => 'value_1', 'public_property_2' => 'value_2', ], ]
- с передачей параметров в аргументы функции
__construct()
public array $lazyLoadConfig = [ 'thirdComponent' => [ 'class' => [ ThirdComponent::class, ['construct_argument_1', 'construct_argument_2'] ], ], ]
- комбинирование назначения публичных свойств и передача параметров в аргументы функции
__construct()
public array $lazyLoadConfig = [ 'nextComponent' => [ 'class' => [ NextComponent::class, ['construct_argument_1', 'construct_argument_2'] ], 'public_property_1' => 'value_1', 'public_property_2' => 'value_2', ], ]
- добавление объекта в
cacheс последующим переиспользованием закешированой версии добавление к имени своства префикса(нижнее подчеркивание_)
public array $lazyLoadConfig = [ '_nextComponent' => [ // данное своство при первом обращении будет закешировано, и при последующих обращениях будет использоваться закешированная версия 'class' => [ NextComponent::class, ['construct_argument_1', 'construct_argument_2'] ], 'public_property_1' => 'value_1', 'public_property_2' => 'value_2', ], ]
4.Использование
Обращаться к свойствам как к обычным свойствам класса
<?php namespace some\path; use andy87\lazy_load\LazyLoadTrait; /** * SomeClass * * @property-read SomeComponent $someComponent * @property-read OtherComponent $otherComponent * @property-read ThirdComponent $thirdComponent * * @package yii2\controllers */ class SomeClass { use LazyLoadTrait; /** @var array */ public array $lazyLoadConfig = [ 'someComponent' => SomeComponent::class, 'otherComponent' => [ 'class' => OtherComponent::class, 'public_property' => 'some value' ], '_thirdComponent' => [ 'class' => [ ThirdComponent::class, ['construct_argument_1', 'construct_argument_2'] ], ], '_nextComponent' => [ 'class' => [ NextComponent::class, ['construct_argument_1', 'construct_argument_2'] ], 'public_property' => 'some value' ], ]; /** * @return string */ public function actionView(): string { // Apply LazyLoad $text = $this->someComponent->insideSomeComponent->test(); if (Yii::$app->request->isPost) { return $this->otherComponent->someMethod(); } if (Yii::$app->request->isAjax) { $text = $this->_thirdComponent->mextMethod(); } if (Yii::$app->request->isDelete) { $text = $this->_nextComponent->mextMethod(); } return $this->render('view', ['text' => $text]); } }
Для динамической настройки, с получением своств из метода, надо перезаписать метод findLazyLoadConfig()
<?php namespace some\path; use andy87\lazy_load\LazyLoadTrait; /** * SomeClass * * @property-read SomeComponent $someComponent * @property-read DymanicConfigComponent $dynamicConfigCmponent * * @package yii2\controllers */ class SomeClass { use LazyLoadTrait; /** @var array */ public array $lazyLoadConfig = [ 'someComponent' => [ 'class' => SomeComponent::class, 'public_property' => 'some value' ], 'dynamicConfigCmponent' => DymanicConfigComponent::class, ]; /** * @return string */ public function actionView(): string { $message = $this->otherComponent->insideSomeComponent->test(); return $this->dynamicConfigCmponent->insideSomeComponent->test(); } protected function findLazyLoadConfig(string $name): ?object { return match ($name) { 'dynamicConfigCmponent' => [ 'class' => [SomeComponent::class, $this->getArguments() ], ], default => parent::findCachedObject($name), } } }
P.S. в Yii2 имеется.
регистрация класса и вызов его через контейнер:
Yii::$container->set('someComponent', SomeComponent::class);
Yii::$container->get('someComponent')
Ленивая загрузка компоненов приложения:
// config/web.php | (frontend|backend|common)/config/main.php
'components' => [
'someComponent' => [
'class' => 'some\path\SomeComponent',
'property' => 'value',
],
],
//use
$component = Yii::$app->someComponent; // Создается только при обращении
andy87/yii2-lazy-load-trait 适用场景与选型建议
andy87/yii2-lazy-load-trait 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 3 次下载、GitHub Stars 达 1, 最近一次更新时间为 2025 年 03 月 08 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「php」 「traits」 「loading」 「yii2」 「construct」 「lazyload」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 andy87/yii2-lazy-load-trait 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 andy87/yii2-lazy-load-trait 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 andy87/yii2-lazy-load-trait 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Laravel API Resources supercharged to get rid of N+1 problems.
Model mapping, unmapping and validation
Integrates data-mapper in Symfony projects.
Port of Facebook's dataloader to PHP
PACE (Progress Automatically Certain to Entertain) - Automatic page load progress bar for Yii PHP Framework
Various traits related to xWP packages
统计信息
- 总下载量: 3
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 16
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: CC-BY-SA-4.0
- 更新时间: 2025-03-08