d3yii2/d3system

Yii2系统

dev-master 2024-09-23 09:40 UTC

This package is auto-updated.

Last update: 2024-09-23 09:40:52 UTC


README

Yii2

d3system

安装

composer require d3yii2/d3system dev-master

在单独的配置文件中配置模块

模块从D3Module扩展

class Module extends D3Module 
{
}

在配置文件中只定义路径

        'd3persons' => [
            'class' => 'yii2d3\d3persons\Module',
            'configFilePath' => __DIR__ .'/module_d3persons.php'
        ],

在模块配置文件中添加模块类以供IDE提示

return [
    'class' => 'yii2d3\d3persons\Module',
    'ownerExpire' => '+10 years',
    'userExpire' => '+10 days',
];    

配置

添加翻译

$config = [
   'components' => [
        'i18n' => [
            'translations' => [ 
                'd3system*' => [
                    'class' => 'yii\i18n\PhpMessageSource',
                    'basePath' => '@d3yii2/d3system/messages',
                    'sourceLanguage' => 'en-US',
                ],
                'crud' => [
                    'class' => 'yii\i18n\PhpMessageSource',
                    'basePath' => '@d3yii2/d3system/messages',
                    'sourceLanguage' => 'en-US',
                ],
            ]
        ]
    ]
];

组件

模型列表

配置

 'components' => [
        'ModelsList' => [
            'class' => 'd3system\compnents\ModelsList',
            'cacheKey' => 'd3system\modeList',
            'cacheDuration' => 3600
        ]    
        

用法

  $modelId = \Yii::$app->ModelsList->getId($model);

组件命令

d3system必须在控制台配置中定义为模块

    'modules' => [
        'd3system' => [
            'class' => 'd3system\Module'
        ],
    ]

从D3CommandComponent扩展

use d3system\compnents\D3CommandComponent; 
class DailyActivityNotification extends D3CommandComponent {

    public $setting1;
    public $setting2;
    
    public function init()
    {
        //init logic
    }
    
    public function run(D3ComponentCommandController $controller) : bool
    {
        parent::run($controller);
        //runing logic
    }        
}

在控制台配置中定义为组件

    'components' => [
        'activityEmail' => [
        'class' => 'd3yii2\d3activity\components\DailyActivityNotification',
        'setting1' => 15,
        'setting2' => 22,
    ]    

执行命令组件

yii d3system/d3-component-command activityEmail,component2,component3

日期和时间转换

依赖项 https://github.com/d3yii2/yii2-datetime

转换仅适用于以"_local"结尾的模型属性,例如

$model->YOUR_ATTRIBUTE

使用

$model->YOUR_ATTRIBUTE_local

在模型中添加行为配置

将行为添加到您的模型中,并列出需要转换的属性 重要:在此处不要添加"_local"后缀!

public function behaviors(): array
{
    return D3DateTimeBehavior::getConfig(['YOUR_ATTRIBUTE']);
}

或如果您需要自定义选项(请参阅https://github.com/d3yii2/yii2-datetime

public function behaviors()
{
    return [
        'datetime' => [
            'class' => D3DateTimeBehavior::className(), // Our behavior
            'attributes' => [
                'YOUR_ATTRIBUTE', // List all editable date/time attributes
            ],
            // Date formats or other options
           'originalFormat' => ['datetime', 'yyyy-MM-dd HH:mm:ss'],
           'targetFormat' => 'date',
        ]
    ];
}

在视图中显示值

<?= $model->YOUR_ATTRIBUTE_local ?>

在保存前分配值

$model->load(Yii::$app->request->post());

 $model->YOUR_ATTRIBUTE_local = $value;

 $model->setAttribute('YOUR_ATTRIBUTE_local', $value);

通过多次赋值确保加载()时本地属性有'safe'规则

// Virtual params for DateTimeBehavior
public function rules(): array
{   
    return [
        [...],
        [['YOUR_ATTRIBUTE_local'], 'safe'],
    ];
}

在控制器中初始化D3EditableAction

editAbleFields: must match real attributes
editAbleFieldsForbbiden: must match real attributes
modelName: pass current controller model Name with full Namespace
/**
 * @var array
 */
public $editAbleFields = ['hasEditable', 'status'];

/**
 * @var array
 */
public $editAbleFieldsForbbiden = [];

操作

public function actions()
{
    return [
        'editable'      => [
            'class'                   => D3EditableAction::class,
             'modelName'               => AudAuditor::class,
             'editAbleFields'          => ['status','notes'],
             'editAbleFieldsForbbiden' => $this->editAbleFieldsForbbiden,
             'preProcess' => static function (Inout $model) {
                  if ($model->isAttributeChanged('driver')) {
                     $model->driver = iconv('UTF-8', 'ASCII//TRANSLIT',$model->driver);
                  }   
             },
             'outPreProcess' => static function (ContInout $model, array $output) {
                 if (isset($output['ediBookingId'])) {
                     $output['ediBookingId'] = DepoEdiBookingDictionary::getIdLabel($output['ediBookingId']);
                 }
                 return $output;
             }             
        ],
    ];
}