Arief Siswanto
2019-09-07 13:43:56buat folder components
simpan kode dibawah ini pada folder components\ActiveRecord.php
<?php
namespace app\components;
use Yii;
use yii\behaviors\BlameableBehavior;
use yii\behaviors\TimestampBehavior;
use yii\db\ActiveRecord as BaseActiveRecord;
use yii\db\Expression;
use app\models\User;
/**
* Kelas active record dasar untuk semua active record yang ada
* Semua model harus ada field status, created_at, created_by, updated_at, updated_by
*/
abstract class ActiveRecord extends BaseActiveRecord {
const STATUS_PUBLISH = 10;
const STATUS_UNPUBLISH = 0;
const YES = 1;
const NO = 0;
const SCENARIO_CREATE = 'create';
const SCENARIO_UPDATE = 'update';
/**
* Fungsi aturan render form.
* Cukup return array berupa nama field di model beberapa atribute.
* Di form dia bisa generate form field sendiri.
* By default akan anggap text field.
* Contoh:
* return [
* 'name',
* 'category_id'=>['label'=>'Category', 'type'=>'select']
* ];
*/
public function behaviors() {
return [
'timestamp' => [
'class' => TimestampBehavior::className(),
'attributes' => [
ActiveRecord::EVENT_BEFORE_INSERT => ['created_at', 'updated_at'],
ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at'],
],
'value' => new Expression('NOW()'),
],
];
}
/**
* @return ActiveQuery
*/
public function getCreatedBy() {
return $this->hasOne(User::className(), ['id' => 'created_by']);
}
/**
* @return ActiveQuery
*/
public function getUpdatedBy() {
return $this->hasOne(User::className(), ['id' => 'updated_by']);
}
public static function findAllPublished() {
return self::find()->where(['status' => self::STATUS_PUBLISH])->all();
}
public function getPublishText() {
return $this->status == self::STATUS_PUBLISH ? 'Published' : 'Unpublished';
}
/**
*
*/
public function fileRequired($attribute, $params)
{
var_dump($_FILES, $_POST);die('#');
}
/**
* Fungsi untuk mengembalikan seluruh data dalam format key=>value
* Tujuan utama biasanya digunakan untuk menampilkan dropdown list
* @param int $key, nama field untuk key
* @param int $value nama field untuk value
*/
public static function getAllOptions($value='name', $key='id')
{
$result = self::findAllPublished();
return \yii\helpers\ArrayHelper::map($result, $key, $value);
}
/**
* Fungsi untuk menghasilkan url (slug, permalink)
* Fungsi ini membutuhkan mbstring dinyalakan di PHP.ini. Apabila karena satu hal
* tidak bisa menjalankan mbstring, maka solusinya ganti source code menjadi menggunakan replace_special_character.php
* Contoh coding lihat di bagian versi bawah
* @param string $str
* @return string
*/
public function stringToUrl($str) {
if ($str !== mb_convert_encoding(mb_convert_encoding($str, 'UTF-32', 'UTF-8'), 'UTF-8', 'UTF-32'))
$str = mb_convert_encoding($str, 'UTF-8', mb_detect_encoding($str));
$str = htmlentities($str, ENT_NOQUOTES, 'UTF-8');
$str = preg_replace('`&([a-z]{1,2})(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig);`i', '\\1', $str);
$str = html_entity_decode($str, ENT_NOQUOTES, 'UTF-8');
$str = preg_replace(array('`[^a-z0-9]`i', '`[-]+`'), '-', $str);
$str = strtolower(trim($str, '-'));
return $str;
}
public static function listStatus(){
return[
self::STATUS_PUBLISH => 'Publish',
self::STATUS_UNPUBLISH => 'Unpublish',
];
}
}