Home
NexoPOS

Classe di ambito

Quando si costruiscono componenti CRUD, potresti avere classi basate sulla stessa tabella. Pertanto, vuoi applicare un ambito (scope) personalizzato a ciascun componente per filtrare il modo in cui vengono recuperate le voci.

Un buon esempio è un blog con PostCrud e MyPostCrud. Entrambe le classi usano la stessa tabella, ma MyPostCrud dovrebbe visualizzare i post creati dall’utente connesso. È qui che entrano in gioco le classi Scope.

Dichiarazione dell’ambito

Nel tuo modulo, l’ambito deve essere memorizzato nella directory “Scopes”. Sebbene non sia un requisito, consigliamo vivamente questo approccio. La definizione di un ambito segue la stessa struttura di uno scope Laravel regolare. Ecco un esempio di come vengono dichiarati gli ambiti:


<?php
namespace Modules\MyModule\Scopes;

use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Database\Query\Builder;
use Illuminate\Database\Eloquent\Scope;
use Illuminate\Support\Facades\Auth;

class MyPost implements Scope
{
    public function apply( Builder | QueryBuilder $builder, Model $model )
    {
        $builder->where( 'author', Auth::id() );
    }
}

Utilizzando gli ambiti sulle classi

Ora che abbiamo definito l’ambito, possiamo applicarlo a qualsiasi classe CRUD su cui desideriamo usarlo. Ecco come procedere:


<?php
namespace Modules\MyModule\Crud;

use App\Services\CrudService;
use App\Classes\CrudScope;
use Modules\MyModules\Scopes\MyPost;

#[ CrudScope( MyPost ) ]
class MyPostCrud extends CrudService
{
    // internal class definition
}