Osumi Framework
es en eu v9.8.1 GitHub

Zeregin Arruntak

Dokumentu honek Osumi Framework-eko ohiko zeregin errealak eta horiek konpontzeko gomendatutako (kanonikoa) modua deskribatzen ditu.

Hainbat ikuspegi posible badira, Osumi Framework-eko irtenbide idiomatikoa bakarrik erakusten da.

Adibide guztiek honako hau suposatzen dute:


1. JSON amaiera-puntu sinple bat sortu

Helburua

JSON /api/ping-tik itzuli.

Ibilbidea

use Osumi\OsumiFramework\Routing\ORoute;
use Osumi\OsumiFramework\App\Module\Api\Ping\PingComponent;

ORoute::get('/api/ping', PingComponent::class);

Osagaia

class PingComponent extends OComponent {
  public string $status = 'ok';
}

Txantiloia (PingTemplate.json)

{
	"status": "{{ status }}"
}

2. Jaso Sarrera DTO bat Erabiliz

Helburua

Sortu erabiltzaile bat balioztatutako sarrera erabiliz.

DTO

class CreateUserDTO extends ODTO {
  #[ODTOField(required: true)]
  public ?string $name = null;

  #[ODTOField(required: true)]
  public ?string $email = null;
}

Osagaia

class CreateUserComponent extends OComponent {
  public string $status = 'ok';

  public function run(CreateUserDTO $dto): void {
    if (!$dto->isValid()) {
      $this->status = 'error';
      return;
    }

    $u = new User();
    $u->name = $dto->name;
    $u->email = $dto->email;
    $u->save();
  }
}

3. Babestu amaiera-puntua autentifikazioarekin

Helburua

Autentifikatutako erabiltzaileek bakarrik sar daitezke /api/profile-ra.

Ibilbidea

ORoute::get('/api/profile', ProfileComponent::class, [LoginFilter::class]);

Sarbide Iragazki Datuak

public function run(ORequest $req): void {
  $login = $req->getFilter('Login');
  $user_id = $login['id'];
}

4. URL Parametro bat Irakurri

Helburua

Sarbide /user/:id.

Ibilbidea

ORoute::get('/user/:id', UserComponent::class);

Osagaia

public function run(ORequest $req): void {
  $id = $req->getParamInt('id');
  $this->user = User::findOne(['id' => $id]);
}

5. Zerbitzu bat Erabili Osagai Baten Barruan

Helburua

Negozio logika osagaitik kanpora eraman.

Zerbitzua

class UserService extends OService {
  public function getAll(): array {
    return User::where([]);
  }
}

Osagaia

class UsersComponent extends OComponent {
  private ?UserService $us = null;
  public array $users = [];

  public function __construct() {
    parent::__construct();
    $this->us = inject(UserService::class);
  }

  public function run(): void {
    $this->users = $this->us->getAll();
  }
}

6. Eredu bat gorde edo eguneratu

Helburua

Txertatu edo eguneratu automatikoki save() erabiliz.

$user = new User();
$user->name = 'Alice';
$user->email = 'alice@mail.com';
$user->save(); // TXERTATU

$user = User::findOne(['id' => 1]);
$user->izena = 'Eguneratutako izena';
$user->save(); // EGUNERATU

7. Itzuli Modeloen Zerrenda bat (JSON)

Helburua

Erabiltzaileak Modelo Osagai bat erabiliz itzuli.

Osagaiaren Barruan

public ?UserListComponent $list = null;

public function run(): void {
  $this->list = new UserListComponent();
  $this->list->list = User::where([]);
}

Txantiloia

{
  "users": [
    {{ list }}
  ]
}

8. Fitxategien Igoera Kudeatu

Helburua

Fitxategi bat modu seguruan igo.

DTO

class UploadDTO extends ODTO {
  #[ODTOField(required: true)]
  public ?array $file = null;

  public function __construct(ORequest $req) {
    parent::__construct($req);
    $this->file = $req->getFile('file');
  }
}

Osagaia

public function run(UploadDTO $dto): void {
  if (!$dto->isValid()) return;

  $file = $dto->file;
  $dest = $this->getConfig()->getDir('uploads') . basename($file['name']);
  move_uploaded_file($file['tmp_name'], $dest);
}

9. Erabili diseinu pertsonalizatua

Helburua

Ibilbide talde bati diseinu bat aplikatu.

ORoute::layout(MainLayoutComponent::class, function() {
  ORoute::get('/home', HomeComponent::class);
});

Edo konbinatu aurrizkia + diseinua:

ORoute::group('/admin', AdminLayoutComponent::class, function() {
  ORoute::get('/dashboard', DashboardComponent::class);
});

Diseinuek errendatutako osagaiaren irteera biltzen dute eta hau jasotzen dute:


10. Balidazio erroreak behar bezala kudeatu

DTO balidazioa

if (!$dto->isValid()) {
  $this->status = 'error';
  $this->errors = $dto->getValidationErrors();
  return;
}

Modeloa Ez Da Aurkitu

$user = User::findOne(['id' => $id]);
if (is_null($user)) {
  $this->status = 'error';
  return;
}

Laburpena

Errezeta hauek Osumi Framework-en ohiko zereginak egiteko modu kanonikoa erakusten dute:

Jarraitu eredu hauek aplikazio koherente eta aurreikusgarriak lortzeko.