Downloadd3system
Installation
composer require d3yii2/d3system dev-master
Configuration
add translation $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
Configuration: 'components' => [
'ModelsList' => [
'class' => 'd3system\compnents\ModelsList',
'cacheKey' => 'd3system\modeList',
'cacheDuration' => 3600
]
Usage: $modelId = \Yii::$app->ModelsList->getId($model);
Date & Time conversions
Dependency
https://github.com/d3yii2/yii2-datetime
Conversion works only for the model attributes suffixed vith "_local"
A example, instead $model->YOUR_ATTRIBUTE
use $model->YOUR_ATTRIBUTE_local
Add behavior config in model
Add the behavior to your model and list the attributes need to be converted
Important: do NOT add the "_local" suffix here! public function behaviors(): array
{
return D3DateTimeBehavior::getConfig(['YOUR_ATTRIBUTE']);
}
Or if You need custom options (see the 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',
]
];
}
Display value in view
<?= $model->YOUR_ATTRIBUTE_local ?>
Assign the value before save
$model->load(Yii::$app->request->post());
or $model->YOUR_ATTRIBUTE_local = $value;
or $model->setAttribute('YOUR_ATTRIBUTE_local', $value);
By multiple assignment via load() ensure the local attributes have 'safe' rules: // Virtual params for DateTimeBehavior
public function rules(): array
{
return [
[...],
[['YOUR_ATTRIBUTE_local'], 'safe'],
];
}
D3EditableAction Initial Setup in Controller 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 = [];
Actions 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;
}
],
];
}
|