Yii2: Pengaturan Dasar Yii Framework Versi 2 Author: Hafid Mukhlasin Category: PHP, Yii Framework 24 Jun 14
Ternyata benar kata temen2 di group yii Indonesia, semakin kesini Alhamdulillah saya merasakan bahwa Yii2 lebih mudah dibanding Yii1, Yii2 lebih mirip boilerplate atau web yang udah jadi, so kita tinggal cutomize aja.. Artikel ini merupakan lanjutan dari artikel sebelumnya Instalasi Yii via Composer (baca dulu jika belum). Pada artikel ini saya akan membahas tentang pengaturan dasar yang sebaiknya kita lakukan setelah instalasi Yii (baca disini). Disini, kita masih akan berhubungan dengan command prompt, dan composer. Dua tools “aneh” yang sepertinya kuno sekali hehe.. Oke tanpa perlu berpanjang kata.. silahkan disimak.
Check Requirement Sebelum semuanya membuat Anda bingung, pastikan Anda mengecek kebutuhan minimum server untuk bisa menjalankan Yii. Yii telah menyediakan tools bagi Anda untuk melakukan checking secara otomatis. Caranya via command prompt:
1
php.exe ../htdocs/advanced/requirements.php
Maka akan muncul resume beserta penjelasan (berikut pada pc saya)
Yup ada 1 error, 4 warning, Anda bisa baca apakah signifikan? jika iya maka silahkan di fix dulu (googling yah.. hehe)
Memahami Directory Aplikasi Yii Ketika kita install yii dengan advanced application template, maka kita akan menjumpai 6 folder utama dan beberapa file, berikut ini kira2 penjelasannya mengenai fungsi masing2 folder itu: The root directory contains the following subdirectories: o
backend - backend web application.
o
common - files common to all applications.
o
console - console application.
o
environments - environment configs.
o
frontend - frontend web application.
Root directory contains a set of files. o
.gitignore contains a list of directories ignored by git version system. If you need something never get to your source code repository, add it there.
o
composer.json - Composer config described in detail below.
o
init - initialization script described in “Composer config described in detail below”.
o
init.bat - same for Windows.
o
LICENSE.md - license info. Put your project license there. Especially when opensourcing.
o
README.md - basic info about installing template. Consider replacing it with information about your project and its installation.
o
requirements.php - Yii requirements checker.
o
yii - console application bootstrap.
o
yii.bat - same for Windows.
Intinya, ada 3 aplikasi yaitu frontend, backend dan console. o
Frontend adalah aplikasi web yang akan ditampilkan untuk end user.
o
Backend adalah aplikasi web yang berfungsi untuk administrator dalam mengelola aplikasi frontend.
o
Console adalah aplikasi yang digunakan untuk cron jobs and low-level server management. dan juga digunakan selama deployment aplikasi dan menghandle migrations dan assets.
Ada juga folder common yang berisi file2 yang digunakan oleh lebih dari satu aplikasi, sebagai contoh global configuration seperti pengaturan koneksi database, atau general model seperti model user. Yii2 sudah memperhitungkan pengembangan aplikasi enterprise, dimana sangat support untuk pengembangan aplikasi secara team menggunakan git. Kalo kita lihat pada Yii2 ini, ada beberapa file yang berakhiran “-local” yaitu main-local.php dan param-local.php, itu adalah file-file yang hanya untuk penggunaan local sehingga dikecualikan untuk diupload ke repository git, silahkan cek file .gitignore. Terkait dengan parameter dan configuration pada Yii2, berikut ini urutannya yii membacanya:
Predefined path aliases o
@yii – framework directory.
o
@app – base path of currently running application.
o
@common – common directory.
o
@frontend – frontend web application directory.
o
@backend – backend web application directory.
o
@console – console directory.
o
@runtime – runtime directory of currently running web application.
o
@vendor – Composer vendor directory.
o
@web – base URL of currently running web application.
o
@webroot – web root directory of currently running web application.
Setting Database & Migrate
Yii2 udah nyiapin template database (tabel). Dan kerennya kodenya pun dah dibikinin mulai dari mekanisme login, logout, register dan lupa password, so kita tinggal nonton doang :). 1.
Buatlah database baru, pada tutorial ini saya membuat database mysql dengan nama: yii2advanced
2.
Hubungkan projek yii Anda dengan database yang baru dibikin tadi, caranya buka file main-local.php yang terletak di directory common/config/main-local.php pada bagian component.db 1 'dsn' => 'mysql:host=localhost;dbname=yii2advanced',
3.
Jika sudah, maka langkah selanjutnya adalah migrate, gunanya adalah menggenerate tabel yang diperlukan untuk aplikasi kita. Caranya, masih via command prompt 1 php.exe ../htdocs/advanced/yii migrate
4. 5.
Yup, si migrate tool ini menggenerate table user. Selesai deh..
Sekarang kita bisa cobain.. 1.
Silahkan buka frontend di http://localhost/advanced/frontend/web/
2.
Silahkan register atau signup, pake data dummy aja
3.
Dan.. eng ing eng.. habis register otomatis login.
4.
Ok dengan Yii2 kita sudah nggak perlu puyeng lagi dengan login signup user via database.. bahkan ada fitur lupa password
Anda bisa juga mencoba untuk aplikasi backend-nya
Setting Virtual Host di XAMPP Kalo kita perhatikan, url menuju aplikasi frontend maupun backend terlalu panjang, nah kita bisa sederhanakan, o
http://localhost/advanced/frontend/web/ menjadi http://front.end/
o
http://localhost/advanced/backend/web/ menjadi http://back.end/
Kalo kita pake XAMPP kita bisa atur menggunakan virtual host.. caranya 1.
Buka file konfigurasi untuk virtual host, C:\xampp\apache\conf\extra\httpd-vhosts.conf
2.
Tambahkan kode seperti berikut ini
1 2 3 4 5 6 7 8 3.
DocumentRoot "C:/xampp/htdocs/advanced/frontend/web/" ServerName front.end DocumentRoot "C:/xampp/htdocs/advanced/backend/web/" ServerName back.end
Kemudian edit juga file hosts (local dns windows) yang terletak di C:\Windows\System32\drivers\etc, tambahkan kode berikut 1 127.0.0.1 back.end 2 127.0.0.1 front.end
4.
Restart Apache,
5.
Done…
Setting URL SEO Friendly Sebagai mana Yii1, Yii2 juga menyediakan setting untuk url atau permalink yang cantik atau istilah kerennya.. SEO Friendly.. Gimana caranya? gampang kaka…
1.
Gunakan htaccess sebagaimana yang direkomendasikan Yii.. checkout di http://www.yiiframework.com/doc2.0/guide-installation.html, yaitu buat file dengan nama .htaccess yang berisi
1 2 3 4 5 6 7 2.
RewriteEngine on # If a directory or a file exists, use the request directly RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # Otherwise forward the request to index.php RewriteRule . index.php
Letakkan file ini di directory /frontend/web/ dan /backend/web/. Triknya jika di windows, gunakan notepad untuk membuat file htaccess ini, lalu pada saat save gunakan tanda petik dua pada filenamenya untuk mengghindari error “.htaccess”
3.
Kemudian edit file main-local.php yang terletak di directory common/config/main-local.php , tambahkan kode berikut:
1 2 3 4 5 6 7 8 9 10 4.
return [ 'components' => [ ... ..., 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, ], ], ];
Done.. liat bedanya
Yaitu script index.php dihilangkan dari URL Address, controller URL jadi enak dilihat,
dari : http://front.end/index.php?r=site%2Fabout menjadi http://front.end/site/about
Setting Composer Bagian terakhir, adalah setting composer, file composer.json berisi konfigurasi dari projek kita ini, silahkan di edit file ini yang terletak di root directory dari projek kita yaitu C:\xampp\htdocs\advanced\composer.json Update informasi dasar yaitu name, description, keywords, homepage and support sesuaikan dengan project kita. Bagian menarik disini adalah kita bisa menambahkan package atau library external yang diperlukan untuk aplikasi kita pada bagian require . Syaratnya, lirary external tersebut harus ada di packagist.org (gak harus sih.. untuk level advanced :)). Setelah update composer.json maka untuk mengupdatenya buka kembali command prompt, ketik: o
Masuk ke directory root projek kita 1 cd c:\xampp\htdocs\advanced
o
Update composer 1 C:\xampp\php\php.exe
o
C:\xampp\php\composer.phar update --prefer-dist
Tunggu sebentar karena mereka lagi install n update buat kita
o
done
Oke saya kira cukup itu dulu (capek nulisnya
capek juga kan bacanya) mudah2an manfaat..
Requirement Software: OS Windows, XAMPP, Yii2 Brainware: Newbie
Yii2: Generate Code Via Gii di Yii Framework Versi 2 Author: Hafid Mukhlasin Category: PHP, Yii Framework 24 Jun 14
Artikel ini adalah lanjutan dari artikel sebelunya tentang pengaturan dasar Yii Framework. Gii adalah tool untuk menggenerate kode di YiiFramework. Inilah yang menarik di Yii, mungkin sangat sulit bagi saya yang nyubi ini untuk membuat atau menulis kode dari nol.. Generator Yii memudahkan, mempercepat pembuatan sebuah aplikasi, kita juga bisa belajar dari kode yang dihasilkan. Oke langsung aja.. buka aplikasi frontend Anda http://frontend, lalu signup atau register. kemudian: 1.
Buka aplikasi backend, karena gii adanya di backend. http://backend
2.
Silahkan
login
dengan
username
dan
password
hasil
register
tadi
3.
Lalu
akses
4.
Jangan kagok.. hajar saja.. pada Yii 1 untuk membuat Crud, yang perlu kita lakukan adalah generate model dulu,
Gii
so
dengan
cara
Klik
http://backend/gii
Model
Generator
Tadi saat migrate kan generate tabel user, oke kita pake aja dulu.. Eits stop sebelum Preview and Generate.. jangan lupa.. model User sudah dibuatkan Yii secara otomatis ketika tadi kita migrate.. gak percaya?? buka aja di common/models/User.php nah looo.. oke kita skip aja ya langkah ini.. kecuali Anda mau generate tabel lain.. 5.
Sekarang
waktunya
generate
CRUD,
masuk
aja
ke
Crud
Generrator
Pada Model class masukkan aja common\models\User sss Pada
Search
Model
Class
kosongin
dulu
aja..
Lalu pada Controler nih yang harus diisi, misal Anda ingin membuat CRUD di aplikasi backed, maka ya tinggal tulis aja backend\controllers\UserController 6.
Lalu
tinggal
7.
Selesai.. saatnya mencoba.
Preview
and
Generate
deh..
8.
Buka http://backend/user
….
dan..
Lalu
9.
coba
eng
klik
gambar
ing
mata
eng
atau
view
Done..
Oh maaf lupa, untuk memudahkan user mengakses CRUD User, kita bisa buatkan link pada menu utama.. caranya gampang :), Edit file di \backend\views\layouts\main.php, tambahkan item menu
1 2 3 4
$menuItems[] = [ 'label' => 'User', 'url' => ['/user'], ];
Mudah2an manfaat silahkan kalo ada pertanyaan atau masukan thx CMIIW
Yii2: Tutorial Membuat Blog Sederhana Part I Author: Hafid Mukhlasin Category: PHP, Yii Framework 25 Jun 14
Tutorial ini merupakan lanjutan dari artikel Yii2 sebelumnya, Asumsi Anda telah mengikuti tutorial sebelumnya, Oke setelah aplikasi Yii2 ready,maka untuk mengeksplore pemahaman kita, berikut ini saya bawakan study kasus yaitu membuat web blog sederhana.. mengapa sederhana? ya agar saya tidak terlalu panjang nulisnya (padahal karena saya nyubi).. silahkan di kembangkan sendiri Pada tutorial ini, aplikasi web blog dibagai menjadi 2 yaitu frontend untuk pengunjung baca artikel dan backend untuk admin bikin artikel.. Hem.. artikel ini akan saya buat bertahap.. Pada bagian pertama ini saya akan fokus ngoprek FRONTENDnya
1) Modify Layout o
buka file frontend\views\layouts\main.php, lalu modifikasi
- Brand Url (line 29)
1
'brandLabel' => 'My Blog',
- Footer Text (line 68)
1
o
© My Blog = date('Y') ?>
buka file frontend\views\views\site\index.php, , lalu modifikasi
- drop class jumbotron & edit text
1 2
Yii Tutorials!
3
Let's Fun Learn Yii Framework Version 2.0.
4
Are You Ready?<
5
- Buat layout dengan 2 column (9 vs 3) main (list articles) and sidebar (menus)
1 2 3
11
Referensi: http://getbootstrap.com/css http://getbootstrap.com/examples/blog/ - untuk sidebar menu yang berisi category gunakan widget Nav bootstrap untuk membuat tampilan menu
1
use yii\bootstrap\Nav;
2
echo Nav::widget([
3
'items' => [
4
['label'=>'category 1','url'=>'#'],
5
['label'=>'category 2','url'=>'#'], ],
6 7
]);
agar rapi use Nav nya bisa anda letakkan bagian atas dari file ini.
2) Adjust Structure Database Structure databasenya kira2 begini.. ada 3 tabel jadi total 4 tabel dengan tabel user yang udah tercipta saat migrate
1
CREATE TABLE category
2
(
3
id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
4
name VARCHAR(255) NOT NULL,
5 6 7
create_time INTEGER, update_time INTEGER ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
8 CREATE TABLE post
9
10
(
11
id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
12
title VARCHAR(128) NOT NULL,
13
content TEXT NOT NULL,
14 15 16
category_id INTEGER NOT NULL, status INTEGER NOT NULL, create_time INTEGER, update_time INTEGER,
17 18 19 20
user_id INTEGER NOT NULL, CONSTRAINT FK_post_category FOREIGN KEY (category_id) REFERENCES category (id) ON DELETE CASCADE ON UPDATE RESTRICT, CONSTRAINT FK_post_user FOREIGN KEY (user_id)
21
REFERENCES user (id) ON DELETE CASCADE ON UPDATE RESTRICT
22
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
23 24
CREATE TABLE comment
25
(
26
id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
27
content TEXT NOT NULL,
28
status INTEGER NOT NULL,
29 30 31 32 33 34 35
create_time INTEGER, author VARCHAR(128) NOT NULL, email VARCHAR(128) NOT NULL, url VARCHAR(128), post_id INTEGER NOT NULL, CONSTRAINT FK_comment_post FOREIGN KEY (post_id) REFERENCES post (id) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
36 37
INSERT INTO category (name) VALUES('Uncategory');
38 39 40 41 42 43 44
INSERT INTO post (title, content, status, create_time, update_time, user_id, category_id) system is developed using Yii. It is meant to demonstrate how to use Yii to build a comple Complete source code may be found in the Yii releases.
Feel free to try this system by writing new posts and posting comments.',1,1230952187,12309
INSERT INTO post (title, content, status, create_time, update_time, user_id, category_id) ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut la Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea c irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatu cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', 1
INSERT INTO comment (content, status, create_time, author, email, post_id) VALUES ('This i 1230952187, 'Tester', '
[email protected]', 1);
Ini file sql generate 3 tabel
https://drive.google.com/file/d/0BwSv7MUYD04kWmVNeEktTE45NlU/edit?usp=sharing
3) Create Model via Gii http://back.end/gii Buat CRUD Model untuk semua tabel dan jangan lupa gunakan Namespace common\models, yap karena model ini akan digunakan di semua aplikasi (front dan backend)
4). Update Site Controller Part I (Provide data to show in view) buka file frontend\controllers\siteController.php, lalu modifikasi
1
public function actionIndex()
2
{
3
$posts = \common\models\Post::find()
4
->where(['status' => 1])
5 6 7 8
->orderBy('id DESC') ->limit(3) ->all(); $categories = \common\models\Category::find() ->orderBy('name ASC')
9 ->all();
10 11
return $this->render('index', [ 'posts' => $posts,
12
'categories' => $categories,
13
]);
14
}
15
5) Show Data to View Fronted buka file frontend\views\site\index.php, lalu modifikasi Post
o 1
2
foreach($posts as $post){
3
echo '
';
4
echo '
'.$post->title.'
';
5
echo '
'.substr($post->content,0,300).'...
';
6
echo '
<small>Posted by '.$post->user->username.' at '.date('F j, Y, g:i a',$post>create_time).'
';
7
echo '
readmore &
8
echo '
';
9
}
10
?>
link readmore havenot defined o
Category
Category 1
2
$items=[];
3
foreach($categories as $category){
4
$items[]=['label' => $category->name , 'url' => '#'];
5
}
6
echo Nav::widget([
7
'items' => $items,
8
]);
9
?>
link category havenot defined
6). Update Site Controller Part II (Create action Category Post & Single Post) - Category Post
1 2 3 4
public function actionPostCategory($id) { $posts = \common\models\Post::find() ->where(['status' => 1, 'category_id' => $id])
5
->orderBy('id DESC')
6
->limit(5)
7
->all();
8
$categories = \common\models\Category::find()
9
->orderBy('name ASC')
10
->all();
11
return $this->render('postCategory', [
12 13 14 15
'posts' => $posts, 'categories' => $categories, ]); }
- create file postCategory.php di folder frontend\views\site\ postCategory.php same with file index.php - Try http://front.end/site/post-category?id=1 - edit link category in sidebar index.php and postCategory.php - Single Post
1 2 3
public function actionPostSingle($id) { $post = \common\models\Post::find()
4
->where(['status' => 1, 'id' => $id])
5
->one();
6
$categories = \common\models\Category::find()
7
->orderBy('name ASC')
8
->all();
9
return $this->render('postSingle', [
10
'post' => $post,
11 12 13
'categories' => $categories, ]); }
- create file postSingle.php di folder frontend\views\site\ postSingle.php identic with file index.php but for single category - Try http://front.end/site/post-single?id=1 - edit link readmore in main index.php and postCategory.php
Jika ketinggalan (emang kereta) ini file aslinya..
https://drive.google.com/file/d/0BwSv7MUYD04kTm1OSy1TR2xjZjg/edit?usp=sharing