Data & layanan

Layanan framework

Gunakan service container, provider, event, cache, filesystem, logging, hashing, dan encryption.

Service container menyimpan dependency dan layanan inti aplikasi. Binding dapat berupa factory biasa, singleton, instance, atau alias.

Container

app.bind('billing', (app) => new BillingService(app.make('db')));
app.singleton('metrics', () => new MetricsClient());
app.instance('release', '0.2.0');
app.alias('database', 'db');

const billing = app.make('billing');

app.call() menjalankan function atau pasangan class-method dan menyelesaikan dependency yang dapat dikenali container.

Service provider

Provider memiliki method register() untuk binding dan boot() untuk pekerjaan setelah seluruh provider terdaftar.

import { ServiceProvider } from '../../framework/Foundation/ServiceProvider.js';

export class BillingServiceProvider extends ServiceProvider {
  register() {
    this.app.singleton('billing', (app) => new BillingService(app.make('db')));
  }

  async boot() {
    // Daftarkan listener atau lakukan bootstrap tambahan.
  }
}

Tambahkan provider ke bootstrap/providers.js.

Event

app.make('events').listen('user.registered', async (user) => {
  await sendWelcomeEmail(user);
});

await app.make('events').dispatch('user.registered', user);

Cache

Memory cache berlaku selama proses aplikasi hidup.

const users = await app.make('cache').remember('users.active', 60, () => {
  return User.query().where('active', true).get();
});

app.make('cache').forget('users.active');
app.make('cache').flush();

Logging dan filesystem

app.make('log').info('Invoice created', { invoiceId: 10 });
await app.make('files').put('storage/app/report.txt', 'Selesai');

Encryption

const encrypted = app.make('crypt').encrypt({ token: 'sensitive' });
const original = app.make('crypt').decrypt(encrypted);

Encryption memerlukan APP_KEY yang valid. Untuk password, selalu gunakan layanan hash, bukan crypt.

Ketik untuk mencari di seluruh dokumentasi.