Laravel - Kontrak

Kontrak Laravel adalah sekumpulan antarmuka dengan berbagai fungsi dan layanan inti yang disediakan oleh kerangka kerja.

Sebagai contoh, Illuminate\Contracts\Queue\Queue kontrak menggunakan metode yang dibutuhkan untuk mengantri pekerjaan dan Illuminate\Contracts\Mail\Mailer menggunakan metode untuk mengirim email.

Setiap kontrak yang ditentukan mencakup implementasi kerangka kerja yang sesuai. Semua kontrak Laravel tersedia di repositori GitHub seperti yang disebutkan di bawah ini -

https://github.com/illuminate/contracts

Repositori ini menyediakan berbagai kontrak yang tersedia dalam kerangka kerja Laravel yang dapat diunduh dan digunakan sesuai dengannya.

Poin Penting

Saat bekerja dengan kontrak Laravel, harap perhatikan poin penting berikut -

  • Ini wajib untuk mendefinisikan fasad dalam konstruktor kelas.

  • Kontrak didefinisikan secara eksplisit di kelas dan Anda tidak perlu menentukan kontrak di konstruktor.

Contoh

Pertimbangkan kontrak yang digunakan untuk Otorisasi di Laravel yang disebutkan di bawah ini -

<?php

namespace Illuminate\Contracts\Auth\Access;

interface Authorizable{
   /**
      * Determine if the entity has a given ability.
      *
      * @param string $ability
      * @param array|mixed $arguments
      * @return bool
   */
   public function can($ability, $arguments = []);
}

Kontrak tersebut menggunakan fungsi can yang meliputi a parameter bernama ability dan arguments yang menggunakan identifikasi pengguna dalam bentuk file array.

Anda harus menentukan kontrak seperti yang ditunjukkan pada sintaks di bawah ini -

interface <contract-name>

Kontrak digunakan seperti fasad untuk membuat aplikasi Laravel yang kuat dan teruji dengan baik. Ada bermacam-macampractical differences dengan penggunaan kontrak dan fasad.

Kode berikut menunjukkan penggunaan kontrak untuk menyimpan penyimpanan dalam cache -

<?php

namespace App\Orders;
use Illuminate\Contracts\Cache\Repository as Cache;

class Repository{
   /**
      * The cache instance.
   */
   
   protected $cache;
   
   /**
      * Create a new repository instance.
      *
      * @param Cache $cache
      * @return void
   */
   
   public function __construct(Cache $cache) {
      $this->cache = $cache;
   }
}

Kontrak tidak berisi implementasi dan ketergantungan baru; mudah untuk menulis implementasi alternatif dari kontrak yang ditentukan, sehingga pengguna dapat mengganti implementasi cache tanpa mengubah basis kode apa pun.