Data & layanan

Layanan framework

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

Beta · v0.2.0API Lanjit masih dapat berubah sebelum versi stabil. Periksa catatan rilis dan panduan peningkatan sebelum memperbarui.

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('report.txt', 'Selesai');

Binding files sudah berakar di storage/app, sehingga path pada operasinya ditulis relatif terhadap direktori tersebut.

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.

Edit halaman ini di GitHub

Ketik untuk mencari di seluruh dokumentasi.