Yii2: Tutorial Membuat Blog Sederhana Part III
Setelah pada dua artikel sebelumnya kita ngoprek frontend.. maka saya kira cukup untuk tampilan blog sederhana, silahkan dilanjutkan sendiri fitur2 lainnya.. Sekarang kita beralih ke bagian administrator atau backend
Yang akan kita lakukan adalah bikin Crud untuk kelola Post, Category dan Comment
# Generate CRUD Post
Gunakan gii aja ya.. http://back.end/gii
Model Class= common\models\Post
Search Model Class = common\models\PostSearch
Controller Class =backend\controllers\PostController
# Generate CRUD Category
Gunakan gii aja ya.. http://back.end/gii
Model Class= common\models\Category
Search Model Class = common\models\CategorySearch
Controller Class =backend\controllers\CategoryController
# Generate CRUD Comment
Gunakan gii aja ya.. http://back.end/gii
Model Class= common\models\Comment
Search Model Class = common\models\CommentSearch
Controller Class =backend\controllers\CommentController
# Edit Menu pada \backend\views\layouts\main.php
Menu menuju CRUD Category, Post dan Comment
$menuItems[] = ['label' => 'Post', 'url' => ['/post']]; $menuItems[] = ['label' => 'Category', 'url' => ['/category']]; $menuItems[] = ['label' => 'Comment', 'url' => ['/comment']];
Atau kalo ingin model dropdown kita bisa lakukan ini
$menuItems[] = ['label' => 'Blog', 'items' => [ ['label' => 'Post', 'url' => ['/post']], ['label' => 'Category', 'url' => ['/category']], ['label' => 'Comment', 'url' => ['/comment']] ]];
# Edit backend\views\post\_form.php
use yii\helpers\ArrayHelper; // load classes <?php // $form->field($model, 'category_id')->textInput() ?> <?php $dataCategory=ArrayHelper::map(\common\models\Category::find()->asArray()->all(), 'id', 'name'); echo $form->field($model, 'category_id')->dropDownList($dataCategory, ['prompt'=>'-Choose a Category-']) ?> <?php echo $form->field($model, 'status') ->dropDownList( ['0'=>'Draft','1'=>'Publish'], ['prompt'=>''] ); ?>
# Untuk Create & Update Time Harusnya Udah Pake Behaviour
- Edit model \common\models\Post
public function behaviors() { return [ 'timestamp' => [ 'class' => \yii\behaviors\TimestampBehavior::className(), 'attributes' => [ \yii\db\ActiveRecord::EVENT_BEFORE_INSERT => ['create_time', 'update_time'], \yii\db\ActiveRecord::EVENT_BEFORE_UPDATE => 'update_time', ], ], 'autouserid' => [ 'class' => \yii\behaviors\BlameableBehavior::className(), 'attributes' => [ \yii\db\ActiveRecord::EVENT_BEFORE_INSERT => ['user_id'], ], ], ]; }
Ada dua class yang kita pake yaitu
1. TimestampBehavior untuk mendapatkan current timestamp yang mana kemudian diassign ke field create_time and update_time pada event BEFORE_INSERT (akan dijalankan sebelum proses insert)
2. BlameableBehavior untuk mendapatkan current user id alalu diassign ke field user_id event BEFORE INSERT
- Edit model \common\models\Category
public function behaviors() { return [ 'timestamp' => [ 'class' => \yii\behaviors\TimestampBehavior::className(), 'attributes' => [ \yii\db\ActiveRecord::EVENT_BEFORE_INSERT => ['create_time', 'update_time'], \yii\db\ActiveRecord::EVENT_BEFORE_UPDATE => 'update_time', ], ], ]; }
- Edit model \common\models\Comment
public function behaviors() { return [ 'timestamp' => [ 'class' => \yii\behaviors\TimestampBehavior::className(), 'attributes' => [ \yii\db\ActiveRecord::EVENT_BEFORE_INSERT => ['create_time'], ], ], ]; }
- Edit Gridview pada backend\views\post\index.php
<?= GridView::widget([ 'dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'columns' => [ ['class' => 'yii\grid\SerialColumn'], 'id', 'title', 'content:ntext', [ 'class' => 'yii\grid\DataColumn', // can be omitted, default 'attribute' => 'category_id', 'value' => function ($data) { return $data->category->name; // Get field relation }, ], [ 'attribute' => 'status', 'value' => function ($data) { return (($data->status)==1)?"Publish":"Draft"; }, ], // 'create_time:datetime', // 'update_time:datetime', // 'user_id', ['class' => 'yii\grid\ActionColumn'], ], ]); ?>
Source code lengkap.. https://drive.google.com/file/d/0BwSv7MUYD04kcXMtYy1rZVVFMHc/edit?usp=sharing
Thanks gan . sangat membantu untuk newbie Yii2 kayak ane =))
Ane udah coba coba Yii 2, keren banget gan, udah support REST, Include Bootstrap dan masih banyak lagi.
Ditunggu tutorial lainnya.
ditunggu part 4 nya, sangat bermanfaat
Wah jadi malu.. ada om master
om, caranya join tabel di yii2 gimana y?? saya cari torialnya error terus
di databasenya kamu relasikan.. abis itu generate ulang modelnya, maka yii akan membuatkan relasinya
Join tabel, cara paling gampang ya kamu relasikan di tabelnya, abis itu generate ulang giinya
dilanjutin lagi dong gan, diberi pengaturan hak akses, soalnya kalo cuma begini dengan tau URLnya kita tetep bisa ngelakuin perubahan data. ditunggu gan. ohiya, makasih ya gan atas sharing ilmunya
maaf gan, ini blum bs melakukan posting ya? apa saya yg salah ngikutin. soalnya di saya postingan tidak muncul, tetapi tidak ada pesan error. terimakasih.
Thanks membantu sekali bagi saya yang baru belajar dan mengenal Yii, thanks bang hafid
gan di ane tidak bisa melakukan posting, karena user_id tidak terisi, yg seharusnya sudah didapat dari BlameableBehavior. ini msh ada yg kurang atau ada kesalahan?
jadi kalo user_id dimasukin manual, baru bisa create post
coba cek lagi
1. Apakah di model Post udah ada behaviors Blameable
2. Apakah Anda udah login
ini tutorial selesai tidak ada yang ditutup2pi
Ternyata karena di model Post, diset rule untuk user_id = requiered, jadi jika tidak diisi manual melalui form maka akan dianggap ada yg blank, sehingga tidak diproses, CMIIW. setelah diubah ternyata lancar.
Terimakasih mas.
di ubah menjadi gimana bang ? mohon pencerahannya
dibagian rules, ubah jadi begini
public function rules()
{
return [
[['title', 'content', 'category_id', 'status'], ‘required’],
[['content'], ‘string’],
[['category_id', 'status', 'create_time', 'update_time', 'user_id'], ‘integer’],
[['title'], ‘string’, ‘max’ => 128]
];
}
benerr banggat bang google .
om ketika di klik categori untuk kedua kalinya ga berfungsi
masih gelap. coba cek lagi kodemu
mastah ditable post type data create_time dan update_time itu integer. bagaimana agar ketika kita update di ?r=post di backend itu bisa otomatis dan tampil pada frontend sesuai dengan tanggal ketika kita post ?? mohon bantuannya mastah terimakasih
gan ini gmana kok ga bisa ngpost padalah udjh bikin migrate lagi, udh di cek model Post ada behaviors Blameable …
manggil gii nya giman om
untuk nampilin di bagian frontendnya gimana ya?
sangat membantu saya yg lagi belajar yii2
gan cara ngerubah status pada crud agar bisa tampil tulisan publis atau draft bukan angka 1 / 0 gimana ? untuk join ke tabel user gmn juga ya gan
Makasih postingannya sangat bermanfaat
Gan, ini part IV nya sudah ada gan?