--- title: HackMD Dark Theme tags: theme description: Use `{%hackmd theme-dark %}` syntax to include this theme. --- <style> html, body, .ui-content { background-color: #333; color: #ddd; } .markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4, .markdown-body h5, .markdown-body h6 { color: #ddd; } .markdown-body h1, .markdown-body h2 { border-bottom-color: #ffffff69; } .markdown-body h1 .octicon-link, .markdown-body h2 .octicon-link, .markdown-body h3 .octicon-link, .markdown-body h4 .octicon-link, .markdown-body h5 .octicon-link, .markdown-body h6 .octicon-link { color: #fff; } .markdown-body img { background-color: transparent; } .ui-toc-dropdown .nav>.active:focus>a, .ui-toc-dropdown .nav>.active:hover>a, .ui-toc-dropdown .nav>.active>a { color: white; border-left: 2px solid white; } .expand-toggle:hover, .expand-toggle:focus, .back-to-top:hover, .back-to-top:focus, .go-to-bottom:hover, .go-to-bottom:focus { color: white; } .ui-toc-dropdown { background-color: #333; } .ui-toc-label.btn { background-color: #191919; color: white; } .ui-toc-dropdown .nav>li>a:focus, .ui-toc-dropdown .nav>li>a:hover { color: white; border-left: 1px solid white; } .markdown-body blockquote { color: #bcbcbc; } .markdown-body table tr { background-color: #5f5f5f; } .markdown-body table tr:nth-child(2n) { background-color: #4f4f4f; } .markdown-body code, .markdown-body tt { color: #eee; background-color: rgba(230, 230, 230, 0.36); } a, .open-files-container li.selected a { color: #5EB7E0; } </style> # GameShark UII CPL #### baca ini dlu !!! https://blog.javan.co.id/skinny-controller-2145a059ea47 ## Konvensi ### Penamaan Global Pastikan penamaannya konsisten. Konsisten, bukan tentang bahasa Inggris semua atau bahasa Indonesia semua, tapi lebih ke konsistensi pemakaian istilah. Konsisten, bukan hanya di level dokumen teknis, tapi di seluruh lingkup proyek. Ketika ketemu User membahas kasi, lalu di dokumen analisis dituliskan Kepasa Seksi, jangan tiba-tiba berubah menjadi head_of_section atau section_chief di rancangan database. Pakai saja istilah aslinya, kasi. Lumayan mengurangi overhead otak untuk melakukan translation dan dictionary lookup. ### Controller #### Penamaan Penamaan controller untuk resource tertentu menggunakan konvensi `SingularController`, maksudnya jika nama resource nya `category`, maka nama controller menjadi `CategoryController`. #### Daftar Method Daftar nama method yang boleh pada sebuah controller hanya - index **[GET]** > List data dari resource. - create **[GET]** > Menampilkan halaman create resource pada pengguna - store **[POST]** > Melakukan proses penyimpanan resource - show **[GET]** > Menampilkan detail dari resource tertentu - edit **[GET]** > Menampilkan halaman edit resource pada pengguna - update **[POST]** > Melakukan proses pembaruan resource - destroy **[POST]** > Melakukan proses penghapusan resource Selebihnya, jika terdapat resource yang tidak terkover pada method tersebut, usahakan tetap menggunakan method tersebut. Namun, jika tidak bisa, maka boleh menggunakan nama method lain, asalkan masih masuk akal. ### Model #### Penamaan Penamaan model untuk resource tertentu menggunakan konvensi `SingularModel`, maksudnya jika nama resource nya `Category`, maka nama model menjadi `CategoryModel`. ### Seeder #### Penamaan Penamaan seeder untuk resource tertentu menggunakan konvensi `PluralTableSeeder`, maksudnya jika nama resourcenya `User`, maka nama seeder menjadi `UsersTableSeeder`. ## How To ### Membuat migration Membuat <i>migration</i> dapat dilakukan melalui perintah : ``` $ php artisan make:migration <snake_case_migration_name> ``` Hasil <i>migration</i> dengan command ini dapat dilihat di folder `database/migrations`. Untuk membuat <i>migration</i> pada <i>module</i> yang telah dibuat, dapat dilakukan melalui perintah : ``` $ php artisan module:make-migration <snake_case_migration_name> <ModuleName> ``` Hasil <i>migration</i> dapat dilihat pada folder `src/<ModuleName>/Database/Migrations`. Contoh <i>file migration</i> yang telah dibuat seperti di bawah ini. ``` <?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreatePagesTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('examples', function (Blueprint $table) { // Column dengan type bigIncrements akan otomatis menjadi primary key $table->bigIncrements('id'); // Column unique. $table->string('slug')->unique(); // Column nullable. $table->string('title')->nullable(); // Column dengan default value ketika null. $table->boolean('deleted')->default(0); // Column yang nantinya akan dijadikan foreign key menggunakan type unsignedBigInteger. $table->unsignedBigInteger('example_foreign_id'); // Column untuk membuat created_at dan updated_at. $table->timestamps(); }); Schema::table('examples', function (Blueprint $table) { // Contoh pembuatan foreign column. $table->foreign('example_foreign_id') ->references('id')->on('example_parents') ->onDelete('cascade'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('examples'); } } ``` ### Membuat Model Membuat <i>model</i> dapat dilakukan melalui perintah : ``` $ php artisan make:model <CamelCaseModelName> ``` Hasil <i>model</i> dengan command ini dapat dilihat di folder `app`. Untuk membuat <i>model</i> pada <i>module</i> yang telah dibuat, dapat dilakukan melalui perintah : ``` $ php artisan module:make-model <CamelCaseModelName> <ModuleName> ``` Hasil <i>model</i> dapat dilihat pada folder `src/<ModuleName>/Models`. Contoh <i>file model</i> yang telah dibuat seperti di bawah ini. ``` <?php namespace Modules\Category\Models; use Sofa\Eloquence\Eloquence; use Laravolt\Suitable\AutoSort; use Laravolt\Suitable\AutoFilter; use Illuminate\Database\Eloquent\Model; class Category extends Model { use AutoSort, AutoFilter; use Eloquence; // Nama tabel. protected $table = 'examples'; protected $guarded = []; // Kolom yang dapat dicari. protected $searchableColumns = ['title']; // Mengatur kolom mana saja yang dapat diisi melalui input. protected $fillable = [ 'title', 'example_foreign_id' ]; } ``` ### Membuat Seeder Membuat <i>seeder</i> dapat dilakukan melalui perintah : ``` $ php artisan make:seeder <CamelCaseSeeder> ``` Hasil <i>seeder</i> dengan command ini dapat dilihat di folder `database/seeds`. Untuk membuat <i>seeder</i> pada <i>module</i> yang telah dibuat, dapat dilakukan melalui perintah : ``` $ php artisan module:make-seed <CamelCaseSeeder> <ModuleName> ``` Hasil <i>seeder</i> dapat dilihat pada folder `src/<ModuleName>/Database/Seeders`. ### Membuat Controller #### Controller Biasa Membuat <i>controller</i> dapat dilakukan melalui perintah : ``` $ php artisan make:controller <CamelCaseController> ``` Hasil <i>controller</i> dengan command ini dapat dilihat di folder `app/Http/Controllers`. Untuk membuat <i>controller</i> pada <i>module</i> yang telah dibuat, dapat dilakukan melalui perintah : ``` $ php artisan module:make-controller <CamelCaseController> <ModuleName> ``` Hasil <i>controller</i> dapat dilihat pada folder `src/<ModuleName>/Http/Controllers`. Contoh file <i>controller</i> dapat dilihat di bawah ini. ``` <?php namespace Modules\Klpd\Http\Controllers; use Modules\Klpd\Models\Klpd; use Illuminate\Routing\Controller; use Modules\Klpd\Http\Requests\Store; use Modules\Klpd\Http\Requests\Update; use Modules\Klpd\TableView\IndexTableView; class KlpdController extends Controller { public function index() { $items = Klpd::orderBy('created_at')->get(); return view('klpd.index'); } public function create() { return view('klpd.create'); } public function store(Store $request) { Klpd::create($request->all()); return redirect()->route('klpd.index')->withSuccess('Klpd saved'); } public function show(Klpd $klpd) { return view('klpd::show', compact('klpd')); } public function edit(Klpd $klpd) { return view('klpd.edit', compact('klpd')); } public function update(Update $request, Klpd $klpd) { $klpd->update($request->all()); return redirect()->back()->withSuccess('Klpd saved'); } public function destroy(Klpd $klpd) { $klpd->delete(); return redirect()->route('klpd.index')->withSuccess('Klpd deleted'); } } ``` ### Membuat Paginasi Ketika ingin menampilkan list data dari database, maka data tersebut **HARUS** dilakukan paginasi (di limit), sehingga setiap kali pengguna mengakses sistem, tidak akan memberatkan server. Untuk membuat paginasi, Anda bisa menggunakan kode`->paginate(10)` di akhir query (Anda bisa mengganti 10 dengan limit yg ingin ditampilkan per halaman, walaupun sangat direkomendasikan untuk tetap limit 10). Contoh penggunaan nya seperti ini: ``` public function index() { $users = $this->userModel->where('deleted', 0)->paginate(); return view('users.index', compact('users')); } ``` Kemudian, untuk menampilkan tombol-tombol paginasi nya pada view, Anda cukup menggunakan kode `{!! $users->links() !!}`. ### Melakukan JOIN table Untuk melakukan JOIN, Anda bisa menggunakan syntax Laravel. ``` $users = DB::table('users') ->join('contacts', 'users.id', '=', 'contacts.user_id') ->join('orders', 'users.id', '=', 'orders.user_id') ->select('users.*', 'contacts.phone', 'orders.price') ->get(); ``` ## Additional Info ### Baca Dokumen Laravel, Google, Stackoverflow, kalau mentok yaudah pasrah aja