ilbronza/crud is a Laravel package for :crud_manager.
It currently has 1 GitHub stars and 302 downloads on Packagist (latest version v2.5.1).
Install it with composer require ilbronza/crud.
Discover more Laravel packages by ilbronza
or browse all Laravel packages to compare alternatives.
Last updated
This is where your description should go. Take a look at contributing.md to see a to do list.
Before install media library (https://github.com/spatie/laravel-medialibrary)
Before install spatie permissions (https://github.com/spatie/laravel-medialibrary)
Before install activity log (https://spatie.be/docs/laravel-activitylog/v4/introduction) USE php artisan vendor:publish to publish activity-log migrations and config. Installation is bugged
Via Composer
$ composer require ilbronza/crud
$ php artisan notifications:table
$ php artisan migrate
$ php artisan vendor:publish --tag=crud-migrations
$ php artisan migrate
on config/media-library.php
'media_model' => IlBronza\CRUD\Models\Media::class,
'path_generator' => IlBronza\CRUD\Helpers\MediaPathGenerator::class,
on app.js and then run npm
require('./ilBronza.crud.js');
Il broadcast è opzionale e pubblica sul canale privato configurato un evento
crud.model.changed con questo payload:
{
"model": "App\\Models\\Order",
"key": 42,
"text": "Order updated",
"action": "updated",
"origin": {
"browserTabId": "5a91610f-29f5-48ec-bb66-bdf46b3a12a3",
"tableId": "orders"
}
}
origin è opzionale. Quando una modifica proviene da una DataTable, il
browser invia X-IB-Datatable-Browser-Tab-Id e
X-IB-Datatable-Table-Id; l'evento li cattura alla costruzione, prima di
un'eventuale coda, e li ripubblica come metadati di correlazione. Non usare
questi valori per autorizzazione o autenticazione.
Per action: "created", il client usa key (la chiave primaria effettiva,
non necessariamente un intero) per decidere se recuperare la riga e
aggiungerla alla propria tabella. Questo evita di definire nel package un
formato di riga comune a CRUD e DataTables.
Il canale per App\Models\Order è
channel.crud-events.models.order. Abilitare CRUD_BROADCAST_ENABLED=true e
autorizzare i canali privati in routes/channels.php dell'applicazione:
Broadcast::channel('channel.crud-events.models.{modelClass}', fn ($user) => $user !== null);
Con Laravel Echo il listener è:
Echo.private('channel.crud-events.models.order')
.listen('.crud.model.changed', (event) => {
console.log(event.model, event.key, event.text);
});
Il testo libero si personalizza nel controller CRUD; restituire null evita
l'invio per quella specifica azione. Le creazioni sono intercettate dai model
base, quindi vengono inviate anche quando avvengono fuori da un controller CRUD:
class Order extends BaseModel {}
public function getCrudBroadcastText(Model $model, string $action): ?string
{
return "Ordine {$model->getKey()} {$action}";
}
Il prefisso è configurabile con CRUD_BROADCAST_CHANNEL; per usare una
convenzione diversa, sovrascrivere getCrudBroadcastChannel().
Gli invii standard del controller sono effettuati dopo update (anche inline
editor), delete, force-delete e archive. I model che estendono BaseModel o
BasePivotModel emettono created indipendentemente dal controller che li ha
generati. Anche touch() conserva il comportamento Eloquent e, se aggiorna il
timestamp, emette un evento updated sul canale del model. Per disabilitarlo
su un model specifico, sovrascrivere getCrudTouchedBroadcastText() e
restituire null.
Ogni canale effettivamente usato viene registrato una sola volta in
crud__channels (name, timestamp). Per creare la tabella, pubblicare e
applicare le migration del package:
php artisan vendor:publish --tag=crud-migrations
php artisan migrate
Le azioni custom possono inviare direttamente un testo libero:
$this->broadcastCrudMessage($order, 'Il pagamento è stato confermato', 'paymentConfirmed');
Oltre al read singolo (ib-editor-read + field), la route di update accetta una lettura cumulativa di più campi in una sola richiesta. Viene usata dal coordinatore batch di FormField (vedi readme di ilbronza/formfield).
Richiesta (PUT via _method sulla stessa route di update):
ib-editor-read-batch: true
fields[]: total_cost
fields[]: total_revenue
Risposta:
{
"success": true,
"fetch-fields-batch": true,
"values": { "total_cost": 123.45, "total_revenue": 456.78 },
"model-id": "..."
}
Il flusso è gestito da:
CrudRequestHelper::isEditorBatchReadRequest() — riconosce il flagCRUDUpdateEditorBatchReadTrait::returnFieldsFromEditor() — legge ogni campo da $model->{$field} e ritorna la mappa valuesIl trait è incluso automaticamente da CRUDUpdateTrait; il read singolo returnFieldFromEditor resta invariato.
creare un getter con i possibili valori di relazione in un select
public function getPossiblePaymenttypesValuesArray() : array
{
return Paymenttype::getProjectClassName()::all()->pluck('name', 'id')->toArray();
}
Gestisce il display delle relazioni in una pagina di dettaglio, tipicamente Show o Edit
<?php
class QuotationRelationManager Extends RelationshipsManager
{
public function getAllRelationsParameters() : array
{
return [
'show' => [
'relations' => [
# dichiarazione complessa, dove vengono specificati parametri aggiuntivi oltre al controller
'quotationrows' => [
'controller' => config('products.models.quotationrow.controllers.index'),
'elementGetterMethod' => 'getQuotationrowsForShowRelation',
#alternativo a fieldsGroups
'fieldsGroupsParametersFile' => config('products.models.quotationrow.fieldsGroupsFiles.byQuotation'),
#alternativo a fieldsGroupsParametersFile
'fieldsGroups' => [
'base' => [
'translationPrefix' => 'operators::fields',
'fields' =>
[
'mySelfPrimary' => 'primary',
'mySelfEdit' => 'links.edit',
'contracttype.name' => 'flat',
'internal_approval_rating' => 'flat',
'level' => 'flat',
'cost_company_day' => 'flat',
'cost_gross_day' => 'flat',
'cost_neat_day' => 'flat',
'mySelfDelete' => 'links.delete'
]
]
]
],
# dichiarazione semplice in cui si specifica solo il controller di Show
'project' => config('products.models.project.controllers.show'),
# dichiarazione semplice in cui si specifica solo il controller di Index, che si occupa
# di impostare i fieldsgroup tramite il suo metodo "getRelatedFieldsArray"
'dossiers' => config('filecabinet.models.dossier.controllers.index'),
]
]
];
}
}```
## Change log
Please see the [changelog](changelog.md) for more information on what has changed recently.
## Testing
``` bash
$ composer test
Please see contributing.md for details and a todolist.
If you discover any security related issues, please email author email instead of using the issue tracker.
license. Please see the license file for more information.