Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP

Panduan One-Stop untuk Laravel Command

by
Difficulty:IntermediateLength:LongLanguages:

Indonesian (Bahasa Indonesia) translation by Ari Gustiawan (you can also view the original English article)

Di hari ini, normal untuk seorang developer untuk memiliki pemahaman konsol, dan bagaimana untuk mengeluarkan perintah basic. Tetapi bagaimana jika membuat custom command sendiri untuk meningkatkan alur kerja Anda? Jika kita melihat kembali ke Laravel 3, Anda mungkin ingat bahwa ia menawarkan tasks. Tasks sangat membantu, tapi masih belum bagus untuk operasi yang lebih kompleks. Syukurlah, Laravel 4 include Artisan yang akan membuat hidup Anda sebagai pengembang jadi lebih mudah!


Apa itu Artisan?

Artisan adalah utilitas command yang dirilis pada Laravel 3.

Jika Anda tidak akrab dengan Laravel, maka Anda mungkin tidak menyadari Artisan. Tukang adalah utilitas command line yang dirilis pada Laravel 3. Jika Anda telah menggunakan kerangka lainnya, Anda dapat membandingkan Artisan Oil di FuelPHP, ZFTool di Zend atau konsol di Symfony 2.

Tukang menawarkan banyak command yang berguna yang dapat membantu Anda melakukan berbagai tugas, seperti menghasilkan migration atau publish aset paket. Selain perintah built-in, Anda dapat extend Artisan dengan perintah Anda sendiri.


Artisan Foundation

Ini adalah dimana Artisan menarik kekuatannya.

Dalam Laravel 3, Artisan ditulis dari awal oleh Taylor Otwell (Laravel's creator), maka itu cukup dasar (meskipun masih awesome). Sekarang bahwa Laravel 4 adalah composer based, itu dapat menggunakan paket yang ada yang dikembangkan oleh pengembang lain yang brilian. Sebagai hasilnya, Laravel 4 sekarang tergantung pada berbagai paket dari Symfony framework. Salah satu paket ini adalah Console Component konsol yang sangat baik.

Jika kita mengambil melihat sumber aplikasi Artisan di Illuminate\Console\Application, kita dapat melihat bahwa kelas, itu sendiri, extend Symfony\Component\Console\Application. Ini adalah dimana Artisan menarik kekuatannya. Meskipun Artisan membuat penggunaan konsol di Symfony komponen, banyak metode yang umum telah diberikan lebih fluent seperti Laravel alias. Jadi jangan khawatir, itu masih akan merasa seperti Anda developing dengan Laravel!


Pertanyaan Umum

Dua pertanyaan biasanya muncul, ketika mencoba untuk mengembangkan perintah baru.

Q di mana sebaiknya saya Letakkan perintah?

Ketika Anda menginstal salinan Laravel, Anda akan menemukan direktori standar di app/commands. Direktori ini juga berada di classmap Anda composer.json secara default. Ini berarti bahwa, setelah Anda membuat perintah, Anda akan perlu menjalankan composer dump-autoload untuk generate sebuah file autoload yang diperbarui. Jika Anda tidak, Anda akan menerima kesalahan, mengeluh bahwa perintah Anda tidak dapat ditemukan.

Jika Anda mengembangkan sebuah paket, Anda akan perlu untuk menciptakan sebuah direktori dalam src/<vendor>/<package> direktori untuk menyimpan perintah Anda. Seluruh basis kode Laravel 4, direktori ini dinamai Console. Ingat untuk memastikan bahwa direktori autoloaded  di composer.json paket Anda.

Q bagaimana aku harus menamai perintah?

Seluruh basis kode Laravel 4, semua perintah di suffx dengan Command, dan diberi nama setelah tugas yang mereka lakukan. Katakanlah, misalnya, bahwa Anda memiliki perintah yang membersihkan cache Anda. Anda mungkin nama perintah ini, CacheClearCommand.


Dasar-dasar perintah

Perintah harus melakukan satu tugas. Sepanjang sisa artikel ini, kami akan mengembangkan pengguna generator perintah. Mari kita meninjau dasar-dasar perintah.

Laravel dapat menghasilkan kode boilerplate ini untuk Anda! Cukup menjalankan:

Ini akan membuat kerangka perintah bagi Anda untuk memodifikasi, namun, untuk tujuan dari tutorial ini, kita akan pergi melalui proses membangun perintah dari awal, sehingga kita dapat belajar setiap bagian dari proses.

Nama perintah

Semua perintah perlu memberikan nama. Nama ini digunakan untuk menjalankan perintah dari konsol, dan harus menggambarkan tugas yang melakukan perintah. Meskipun tidak ada Konvensi untuk bagaimana perintah Anda dinamakan, Anda mungkin mempertimbangkan salah satu dari berikut: namespace:group/command, namespace:command, atau hanya command.

Deskripsi perintah

Semua perintah perlu memberikan keterangan. Deskripsi digunakan ketika mengambil daftar perintah yang tersedia dari Artisan, dan ketika melihat docs bantuan untuk perintah. Deskripsi harus menjelaskan secara singkat tugas yang melakukan perintah.

Jika kita membuka konsol  dan mengambil daftar perintah yang tersedia, kami masih tidak akan mampu melihat perintah kita terdaftar.

Untuk mendaftar perintah baru kami, buka app/start/artisan.php dan memiliki cepat membaca melalui blok komentar default yang ada di sana. Ketika kita run Artisan dari konsol, file ini telah dimasukkan; kita akan menggunakannya untuk bootstrap perintah kami. Dalam file ini, kami memiliki akses ke variabel $artisan yang telah dinyatakan sebelum file yang disertakan. Ingat Artisan kelas aplikasi yang kami liat sebelumnya? Salah satu yang di extend dari konsol Symfony komponen? Yah, $artisan adalah instance dari kelas itu.

Mari kita tambahkan perintah kita untuk membuatnya tersedia di konsol.

Atau, jika Anda lebih suka sintaks statis:

add metode menerima command instansi Setelah perintah kita telah ditambahkan, kita dapat mengaksesnya dari konsol.

Perintah ini juga akan tercantum dalam perintah yang tersedia, serta informasi bantuan.

Jika Anda menerima kesalahan, memastikan bahwa Anda menjalankan composer dump-autoload dari root aplikasi Anda, setelah membuat perintah.


Mewarnai Output

Keluaran teks berwarna ke konsol adalah mudah di Artisan. Ada empat metode penolong yang berbeda untuk echo berwarna ANSI output.


Option dan argumen

Sebuah fitur baru yang menarik untuk Artisan adalah kemampuan untuk memberikan perintah dengan pilihan dan argumen.

Argumen

Argumen adalah string yang Anda kirim melalui perintah. Mereka harus diberikan kepada perintah dalam urutan bahwa mereka didefinisikan. Pertimbangkan perintah berikut:

name argumen harus ditentukan sebelum argumen email.

Argumen dapat didefinisikan sebagai opsional.

Option

Option selalu opsional, dan diawali dengan dua tanda hubung, ketika diberikan.

Selain digunakan sebagai boolean switch, pilihan dapat dikonfigurasi untuk menerima nilai atau array nilai.

Menentukan Option dan argumen

Sebelum kita mendefinisikan kami option dan argumen, terbaik untuk mengimpor kelas Symfony diperlukan (mereka panjang dan akan menjadi sakit untuk menulis sepanjang waktu). Dua kelas yang kita butuhkan adalah Symfony\Component\Console\Input\InputOption dan Symfony\Component\Console\Input\InputArgument.

Di atas Deklarasi kelas kami, kami akan mengimpor kelas kedua.

Untuk menentukan Option dan argumen, Anda perlu membuat dua metode baru: getArguments dan getOptions. Kedua metode ini mengembalikan array argumen atau option. Mari kita membuat perintah kita menerima argumen name, dan opsi age.

Ingat: Laravel dapat menghasilkan semua kode boilerplate ini untuk Anda. Kami hanya melakukan itu secara manual untuk keperluan meninjau setiap baris di kelas.

Sekarang, kami dapat memberikan argumen name dan age pilihan dari konsol.

Argumen dan pilihan didefinisikan sebagai multi-dimensi array. Mari kita melihat lebih dekat pada definisi untuk masing-masing.

Argumen definisi

Definisi array argumen menerima empat kunci, dengan hanya yang pertama satu (name argumen) yang diperlukan. Tombol kedua mode argumen dan harus InputArgument::OPTIONAL atau InputArgument::REQUIRED. Yang ketiga adalah deskripsi, dan kunci keempat adalah nilai default, jika mode diset ke InputArgument::OPTIONAL.

Berikut adalah sebuah argumen yang menggunakan semua kunci array.

Definisi Option

Definisi array pilihan menerima lima kunci-kunci dengan hanya yang pertama (name option) yang diperlukan. Kunci kedua adalah cara pintas untuk pilihan (-a misalnya). Ketiga adalah mode pilihan dan dapat menjadi salah satu nilai berikut: InputOption::VALUE_NONE, InputOption::VALUE_REQUIRED, InputOption::VALUE_OPTIONAL, atau InputOption::VALUE_IS_ARRAY. Kunci keempat adalah Deskripsi pilihan, dan kunci kelima adalah nilai default, jika mode adalah tidak InputOption::VALUE_NONE atau InputOption::VALUE_REQUIRED.

Berikut adalah suatu pilihan, menggunakan semua kunci array.

Anda juga dapat menggabungkan modus InputOption::VALUE_IS_ARRAY dengan InputOption::VALUE_REQUIRED atau InputOption::VALUE_OPTIONAL.


Konfirmasi dan pertanyaan

Namun lain fitur baru yang menarik untuk Artisan adalah kemampuannya untuk meminta konfirmasi, atau bahkan bertanya pengguna. Hal ini membuat mengembangkan interaktif perintah sesederhana mungkin.

Konfirmasi

Menggunakan confirm, kita bertanya pengguna, dan membuat mereka mengkonfirmasi dengan "yes" atau "no." Mari kita memastikan bahwa pengguna telah memasukkan usia mereka dengan benar.

Parameter pertama adalah pertanyaan yang Anda ingin bertanya, dan yang kedua adalah nilai default, jika pengguna hits masuk tanpa mengetik apa pun.

Pertanyaan

Menggunakan ask, kami dapat meminta pengguna pertanyaan dan mengharapkan tanggapan dari mereka. Daripada membunuh perintah kami jika pengguna menentukan bahwa mereka memasuki usia mereka salah, mari kita sebaliknya meminta mereka untuk kembali.


Perintah dependensi

Dependecy injection adalah langkah penting untuk memastikan bahwa kode Anda adalah bukti diuji dan masa depan. Mari kita perintah langkah lebih jauh dengan menyuntikkan model instance, sehingga kita dapat menghasilkan pengguna. Kita akan mulai dengan menciptakan sebuah antarmuka pengguna dan user model.

UserInterface kami tidak benar-benar mendefinisikan implementasi metode apapun, karena ini adalah hanya sebuah contoh. Untuk aplikasi dunia nyata, Anda akan menentukan cara-cara yang Anda harapkan pada model Anda.

Sekarang bahwa kita memiliki model User kami mengimplementasikan UserInterface kami, kita dapat melanjutkan untuk men-setup dependency kita pada perintah kami. Aku akan menambahkan sedikit lebih ke kami menghasilkan perintah, dan berinteraksi dengan User model yang di-inject.

Hal pertama yang harus Anda perhatikan adalah bahwa perintah sekarang memiliki konstruktor. Konstruktor ini menerima parameter tunggal dan kami telah jenis mengisyaratkan UserInterface, jadi kita tahu bahwa kita mendapatkan kelas mengimplementasikan metode didefinisikan pada antarmuka. Perintah konstruktor juga harus memanggil constructor induk.

Dalam metode fire perintah, kita langsung menetapkan properti di User model instance. Kami juga menggunakan loop terus meminta pengguna jika mereka telah memasuki usia mereka dengan benar. Terakhir, pengguna disimpan ke database dan kita output ke konsol bahwa pengguna dibuat dan disimpan.

Tapi tunggu! Sebelum kita dapat menggunakan perintah, kita perlu inject instance model User kami.

Jika Anda memiliki database setup dan dikonfigurasi dengan benar, Anda sekarang harus mampu jalankan perintah dan memiliki pengguna baru disimpan ke database!


Paket perintah

Jika Anda mengembangkan sebuah paket di Laravel, Anda mungkin ingin untuk memasukkan perintah. Mendaftar perintah dari paket adalah sebagian besar proses yang sama, kecuali Anda tidak (atau tidak) menambahkan perintah di app/start/artisan.php. Sebaliknya, Anda menyelesaikan mereka dengan Artisan dari dalam package service provider.

Metode commands dapat menerima sejumlah argumen, dan akan menyelesaikan perintah dari wadah aplikasi saat Artisan dimulai.


Kesimpulan

Ketika Anda membandingkan Artisan dalam Laravel 4 dan Laravel 3, Anda akan segera menemukan bahwa perbaikan monumental. Perintah dapat sekarang terikat ke wadah IoC dan meliputi injeksi ketergantungan, memberikan berwarna ANSI output, menggunakan argumen dan pilihan, dan meminta interaksi pengguna.

Kekuatan Artisan, berkat Symfony di konsol komponen, luar biasa. Perintah akan memainkan peran besar, seperti yang kita bergerak maju - sehingga mendapatkan di awal!

Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.