Notes Laravel Scheduler Function onOneServer()

I once worked with devops that did a lot of settings on the server. And he doesn’t have basic PHP. Then he asks about the function scheduler to run on only one server / one instance.

Continue reading Notes Laravel Scheduler Function onOneServer()

Fitur Baru Laravel 5.7: Symfony Dump Server

Belum lama dapat info kalau Laravel sudah update versi lagi dari yang 5.6 ke versi terbaru adalah 5.7. Beberapa programmer ada yang senang, ada juga yang mungkin dan sangat banyak saya lihat di group baik itu group facebook dan group telegram yang mengatakan kurang lebih “Baru belajar 5.5, udah keluar lagi 5.7” dan banyak tipe programmer yang tidak seneng melihat perubahan yang cepat pada Laravel ini.

Continue reading Fitur Baru Laravel 5.7: Symfony Dump Server

Cara Membuat Qrcode dengan Laravel

QRCode salah satu fitur yang memudahkan pembacaan kode suatu produk dalam kasus inventory. Dulu kita juga pernah menggunakan barcode pada Codeigniter. Kasus tersebut saya gunakan dalam pembuatan inventory bengkel dan aplikasi sales order lainnya.

Pada laravel, kita dapat melakukan hal yang sama dengan lebih mudah. Compose memudahkan kita untuk mendownload class yang digunakan untuk membuat QRCode tersebut. Untuk mencobanya, saya akan menjelaskan cara sederhana membuat Qrcode dengan Laravel. Mari ikuti langkah per langkah. Continue reading Cara Membuat Qrcode dengan Laravel

Mengganti URL Composer dengan URL Indonesia

Ada beberapa kawan-kawan yang mulai beralih ke Laravel kesulitan saat melakukan instalasi. Itu saya rasakan juga sekitar 2 bulan yang lalu. Ketika composer install, proses memakan waktu yang lama dan tiba-tiba terhenti. Mencari solusi di Internet tidak ketemu sampai ada yang menyarankan mengecek provider Internet sendiri dan benar. Ternyata ada masalah di Indi*ome.

Setelah itu saya mulai mencari untuk mengganti URL composer agar provider ini tidak nge-block URL composer. Akhirnya ketemu mirroring dari Jepang dengan alamat https://packagist.jp.

Cara untuk mengganti menjadi URL Composer ini dengan perintah pada commandline / CMD / Terminal.

composer config -g repositories.packagist composer https://packagist.jp

Lalu setelah itu untuk melihat apa sudah ada perubahan pada URL tersebut. Bisa ketik dengan perintah command line berikut:

composer config --list --global

Perintah tersebut melihat config list global pada composer yang telah tersetting di komputer kita.

Lalu saya melihat group Laravel Indonesia yang memberi kabar kalau composer sudah ada mirroring nya di Indonesia. Berikut adalah linknya https://packagist.phpindonesia.id

Cara melakukannya hampir sama, copy paste saja kode dibawah ini ke terminal kawan-kawan.

composer config -g repos.packagist composer https://packagist.phpindonesia.id

setelah it bisa lihat kembali config –list –globalnya.

Setelah itu, tada.. silahkan lakukan composer install / update untuk melihat result composer kawan-kawan. Mudah-mudahan lebih cepat ya 🙂

Tutorial Autocomplete Dengan Select2 dan Laravel – Kasus User Role

Pada tutorial berikut ini saya ingin membahas sederhana cara membuat autocomplete dengan Select2 pada Laravel. Pada tutorial ini diharapkan kawan-kawan bisa mengintegrasikan autocomplete ini pada project atau aplikasi Laravel kawan-kawan.

Asumsi disini adalah saya memiliki data user yang cukup banyak, jadi tidak mungkin kita tampilkan semua karena pasti akan membuat aplikasi Laravel kita jadi lambat.

Setiap user memiliki 1 role. Role ini seperti jabatan dan pada kasus autocomplete ini, data role tidak dibuat autocomplete karena data role tidak begitu banyak di aplikasi. Jika nanti kedepan banyak, mungkin saatnya kita buatkan autocomplete pada data role juga. Continue reading Tutorial Autocomplete Dengan Select2 dan Laravel – Kasus User Role

Cara Setting Sederhana Laravel dan Docker

Berawal dari satu project yang memiliki environtment development yang berbeda. Saya mencoba membiasakan setup project entah dengan bahasa apapun dengan docker. Lalu apa sebenarnya docker itu? dan masalah seperti apa yang menyebabkan kita menggunakan docker?

Jawabannya itu sederhana, misalnya di local laptop kita terinstall MySQL versi 5.7. Sedangkan project hanya berjalan lancar di versi 5.6.

Apa yang harus kita lakukan? Jawaban-nya itu biasanya kita downgrade mysql menjadi versi 5.6. Tapi project lainnya yang ada di local laptop dan menggunakan MySQL versi 5.7 kita bagaimana? Dilema 😀

Saat inilah kita harus mencoba docker. Continue reading Cara Setting Sederhana Laravel dan Docker

Ambil Token Untuk Akses Resource Tertentu dengan Laravel via Passport (Password Grant Tokens)

Halo, lama tidak menulis lagi, sekarang saya ingin nge-share sekalian mencatat bagaimana menggunakan Passport pada Laravel dengan studi kasus adalah pengambilan token lalu mengakses resources via api tertentu. Pada tulisan ini saya tidak menjelaskan cara melakukan instalasi Passport pada Laravel, silahkan baca pelan-pelan documentasi Laravel Passport yah 🙂

Asumsi awal adalah saya ada orang android ingin mendapatkan voucher yang dimiliki oleh salah satu customer tertentu. Karena android tidak mengenal proses session, maka customer_id tidak mungkin kita lempar begitu saja melalui proses pengiriman data pada http. Walaupun memang jika data-data biasa saja bukan data seperti transferan duit atau password key untuk akses data-data bank, tetep aja kita coba pasang securitynya agar tidak terlalu terbaca datanya.

Untuk itu, proses dari android ke server biasa melalui API dengan teknologi security seperti OAuth yang tentu sudah di-implementasi oleh Passport Laravel. Tanpa panjang lebar, yuk mari kita buka langsung aja server untuk cara awal mendapatkan tokennya.

Langkah #1
Buka lokal atau server api yang sudah terinstall laravel passport. Lalu ketik perintah untuk membuat client_id dan client secret “Password Grant Tokens”.

php artisan passport:client --password

Laravel Passport 1

Setelah berhasil, gunakan client_id dan client_secret untuk mendapatkan token dengan langkah kedua.

Langkah #2
Oke, jika client_id dan client_secret yang sudah didapatkan, sekarang kita coba akses token-nya dengan aplikasi Postman.

Passport Laravel 2

Pada gambar telihat saya input parameter POST, lalu akses URL dengan url sesuai dengan server atau local IP yang sudah terinstall laravel passportnya. URL Akses get token-nya adalah http://namaserver.com/oauth/token.

Parameter POST data yang dikirim adalah

{
    "grant_type": "password",
    "client_id": "5",
    "client_secret": "gr7Y2EnwlpsXli08RIL39Th7rECfsmR49blyyZcA",
    "username": "adiputra@bambideal.com",
    "password": "admin@123",
    "scope": ""
}

Pilih grant_type nya adalah passport, lalu isi client_id dan client_secret yang didapat pada Langkah 1, isi username dan passport login user yang hendak ingin diambil data tokennya. Jika sudah, SEND saja lalu lihat apakah token/access_token bisa didapat. Pada gambar terlihat access_token didapat.

Langkah #3
Jika udah dapet access_token, kita coba apa bener access_token ini bisa mengambil data user yang barusan kita masukan email/username dan passwordnya. Copy dulu access_token yang didapat pada Langkah 2, lalu buat proses pada Postman baru dengan URL seperti pada gambar.

Laravel Passport 3

access_token tadi di-paste pada kolom Headers dengan parameter Authorization, value Bearer[spasi]access_token. Jangan lupa method yang digunakan adalah GET. Cek routes:list pada laravel untuk melihat detail oauth routes pada Passport.

Langkah 4
Jika sudah, jalankan “SEND” dan lihat…data pribadi dari pemilik token sudah didapatkan. Hal ini karena ketika kita buat laravel, sudah ada route routes/api.php yang mengarah pada endpoint /user.

routes/api.php
Laravel Passport 4

Terlihat pada gambar, ada route /user untuk mendapatkan data user dengan akses pembatasan middleware auth:api.

Langkah 5
Jika sudah benar pada langkah 4, pada gambar diatas sebelumnya itu saya ingin membuat api untuk mendapatkan voucher berdasarkan pemilik token.

Route::group(['middleware' => ['auth:api']], function () {
    Route::post('/voucher/get', ['as'=>'api.voucher.get', 'uses'=>'VoucherController@get'] );

});

Lalu bagaimana selanjutnya? agar kita bisa query data voucher berdasarkan token yang dikirim?

Mari kita coba buka controller VoucherController.php

Laravel Passport 5

Terlihat pada gambar, cara mendapatkan customer_id atau id user dari token yang dikirim adalah dengan cara $request->user()->id;

Sekarang mari kita coba untuk tembak api mendapatkan voucher yang telah kita siapkan diproses ini. Buka kembali Postman, lalu buka tab baru untuk proses tembak api terbaru. Dan jalankan proses seperti pada gambar dibawah ini sampai mendapatkan resources yang sesuai 🙂

Laravel Passport 6

Sampai disini selesai sudah caranya agar token bisa dipakai untuk mendapatkan resources dari api dengan Laravel Passport.

Hal penting lainnya soal token/access_token ini adalah expired dan refresh_token yang didapat ketika mendapatkan token diawal tadi. Karena token yang didapat memiliki expired waktu tertentu jadi perlu handle pengecekan apakah token sudah expired atau belun.

Semoga bermanfaat, bingung tinggal kontak-kontakan aja 😀

Mengambil data lain yang terkait dengan Fractal di Laravel

Di Fractal ada cara untuk mengambil data lain dengan istilah “includes”. Pertama yang mesti didefinisikan itu adalah “data lain yang terkait” seperti apa yang dimaksud? Untuk data yang terkait ini mesti saya coba contohkan dulu sederhananya ya.

Contoh kasus adalah data keranjang belanja. Dalam keranjang belanja kadang developer membuat struktur table seperti ini.

Carts
– ID
– CustomerID
– Note
– Total
– TotalItem
– dll

lalu ada tabel CartDetails yang isinya:

CartDetails:
– ID
– CartID
– ProductID
– ProductName
– QTY
– Subtotal

Kasusnya, munculkan data keranjang belanja berdasarkan CustomerID yang berhasil login.

Data keranjang ini terlibat dalam 2 tabel. Dan biasanya proses pengambilan data ini juga mesti 2 query walaupun memang bisa dalam 1 query. Anggap aja kasus ini 2 query ya 🙂

Setelah kita berhasil query data keranjang. kita mesti buat layout format Fractal, yang biasa disebut dalam istilah Fractalnya adalah “transform”. Dalam transform inilah data hasil query kita simpan dalam object PHP yang akan dikirimkan response nya di API.

Ngeliat documentasi Fractal khusus untuk laravel, banyak tutorial yamg 1 query harus disimpan dalam 1 transform. Nah untuk kasus keranjang ini, kita kan ada 2 query, jadi ya mesti ada 2 transform tapi pemanggilan transform nya tetep 1 kali.

Berikut adalah kode dibagian controller-nya:

class CartController extends Controller
{
    public function get(Request $request) {
        $customer_id = $request->customer_id;
        $CartRepository = new CartRepository;
        $data = $CartRepository->getByCustomer($customer_id);

        $cart = new \stdClass();

        if(count($data) > 0) {
            $cart->id = $data->id;
            $cart->customer_id = $data->customer_id;
            $cart->note = $data->note;
            $cart->total = $data->total;
            $cart->total_qty = $data->total_qty;

            $cart_detail = $CartRepository->getDetailCart($data->id);

            if( count($cart_detail) > 0 ) {
                $cart->items = $cart_detail;
                return fractal()
                    ->item($cart)
                    ->transformWith(new CartTransformer)
                    ->toArray();

            } else {
                return Response::json([
                    'error' => [
                        'message' => 'Cart Empty!'
                    ]
                ], 404);
            }

        } else {
            return Response::json([
                'error' => [
                    'message' => 'Cart Empty!'
                ]
            ], 404);
        }
    }

... # potongan kode

Pada kode diatas, saya ambil data cart, lalu saya simpan diobject sementara dan saya ambil cart_detail untuk mengambil detail-detail dari cart, baru setelah itu saya panggil transformnya.

return fractal()
  ->item($cart)
  ->transformWith(new CartTransformer)
  ->toArray();

Bagian kode CartTransformer.php:

<?php

namespace App\Transformers;

use League\Fractal\TransformerAbstract;

use App\Transformers\CartItemTransformer;

class CartTransformer extends TransformerAbstract
{
  protected $defaultIncludes = [
        'items'
    ];

  public function transform($data) {
    return [
      'id' => $data->id,
      'customer_id' => $data->customer_id,
      'note' => $data->note,
      'total' => $data->total,
      'total_qty' => $data->total_qty
    ];
  }

  public function includeItems($data)
    {
    	$items = $data->items;
        return $this->collection($items, new CartItemTransformer);
    }
}

Di kode ini, saya include CartItemTransformer. Nah beginilah cara menampilkan transformer / data terkait pada Fractal. Anda cukup menambahkan defaultIncludes dan menyiapkan fungsi includesItems-nya.

Alhasil, jika kita panggil api cart ini, data cart serta data cart item otomatis ke ambil. Berikut contoh yang saya buat.

Referensi:

# http://fractal.thephpleague.com/

# https://github.com/spatie/laravel-fractal

Cara mudah membuat breadcrumb dengan Laravel

E-Commerce sangat mementingkan SEO, salah satu faktor yang dapat mendukung baiknya SEO pada e-commerce adalah adanya breadcrumb. Pada tutorial ini saya coba membagi bagaimana membuat Breadcrumb dengan Laravel. Continue reading Cara mudah membuat breadcrumb dengan Laravel

Pengalaman Pasang Socialite Laravel

Belum lama saya coba membuat login via social media pada project laravel dengan Socialite. Dari cara install dan setup bener-bener mudah banget. Inget dulu waktu pasang Facebook, Googleplus, Twitter di Codeigniter atau PHP Native yang lumayan mesti paham codenya.

Tutorial memasang login via social media pada laravel dengan Socialite ada di documentasi ini: [https://github.com/laravel/socialite], namun jika lebih lengkap disertai gambar bisa lihat-lihat di link ini: [https://blog.damirmiladinov.com/laravel/laravel-5.2-socialite-facebook-login.html#.V9yViLP7dJU], twitter dan google plus ada di artikel yang lain. Continue reading Pengalaman Pasang Socialite Laravel